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
#include <cstdio>
#include <vector>

using namespace std;

int n,m,d;

vector<int> KR[1000006];
int ODW[1000006];
int ILK[1000006];
int A[1000006];
int ST[1000006],ilst;

void DFSa( int w ) {
    if ( ILK[w]<d && !ODW[w] ) {
        ODW[w]=1;
        for (int& i : KR[w] ) {
            ILK[i]--;
            DFSa( i );
        }
    }
}

void DFSb( int w, int a ) {
    if ( ODW[w] ) return;
    ODW[w] = a;
    for (int& i : KR[w] ) {
        DFSb( i, a );
    } 
}

int main() {
    scanf("%d%d%d",&n,&m,&d);
    for ( int i=0; i<n; i++ ) { ODW[i]=0; ILK[i]=0; }
    while ( m-- ) {
        int a,b;
        scanf("%d%d",&a,&b);
        a--; b--;
        KR[a].push_back(b);
        KR[b].push_back(a);
        ILK[a]++; ILK[b]++;
    }
    for ( int i=0; i<n; i++ ) DFSa( i );
    for ( int i=0; i<n; i++ ) {
        if ( ILK[i] >= d ) ODW[i] = 0;
           else ODW[i]=-1;
    }
    for ( int i=0; i<n; i++ ) { DFSb( i, i+1 ); A[i]=0; }
    for ( int i=0; i<n; i++ ) {
        if ( ODW[i]>0 )
            A[ODW[i]-1] ++;
    }
    int w=-1,ilw=0;
    for ( int i=0; i<n; i++ ) {
        if (A[i]>ilw)
           { w=i+1; ilw=A[i]; }
    }
    if ( !ilw ) { printf("NIE\n"); return 0; }
    printf("%d\n",ilw);
    for ( int i=0; i<n; i++ )
        if ( ODW[i] == w ) printf("%d ",i+1);
    printf("\n");
    return 0;
}