1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include<bits/stdc++.h>

using namespace std;

int N,M,d;

vector<int> G[200005];
int st[200005];
bool visit[200005];
int porz=0,wsk,maxi=0;
vector<int> del;
vector<vector<int> > V;


void usuwanie(){
    //printf("%lu ",del.size());
    //fflush(stdout);
    while(!del.empty()){
        int u=del.back();
        del.pop_back();
        int usiz=G[u].size();
        if(st[u])
        for(int i=0; i<usiz; i++){
            int w=G[u][i];
            st[w]--;
            if(st[w]<0)st[w]=0;
            //printf("%d ",w);
            if(st[w]<d && st[w]>0) del.push_back(w);
        }
        st[u]=0;
    }
}

void dfs(int s){
    visit[s]=true;
    V[porz].push_back(s);
    for(int i=0; i<G[s].size(); i++){
        if(!visit[G[s][i]] && st[G[s][i]])
            dfs(G[s][i]);
    }
}

int main(){
    int a,b;
    scanf("%d%d%d",&N,&M,&d);
    for(int i=0; i<M; i++){
        scanf("%d%d",&a,&b);
        G[a].push_back(b);
        G[b].push_back(a);
        st[a]++; st[b]++;
    }
    for(int i=1; i<=N; i++)
        if(G[i].size()<d)
            del.push_back(i);
    usuwanie();
    for(int i=1; i<=N; i++){
        if(st[i] && !visit[i]){
            V.push_back(vector<int>());
            dfs(i);
            if(V[porz].size()>maxi){
                maxi=V[porz].size();
                //printf("%d tu ",maxi);
                wsk=porz;
            }
            porz++;
        }
    }
    if(maxi==0) {printf("NIE"); return 0;}
    printf("%lu\n",V[wsk].size());
    sort(V[wsk].begin(),V[wsk].end());
    for(int i=0; i<V[wsk].size(); i++)
        printf("%d ",V[wsk][i]);
    return 0;
}