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
#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> PI;
typedef long long LL;
typedef double D;
#define FI first
#define SE second
#define MP make_pair
#define PB push_back
#define R(I,N) for(int I=0;I<N;I++)
#define F(I,A,B) for(int I=A;I<B;I++)
#define FD(I,N) for(int I=N-1;I>=0;I--)
#define make(A) scanf("%d",&A)
#define make2(A,B) scanf("%d%d",&A,&B)
#define ALL(x) (x).begin(), (x).end()
#define SZ(x) ((int)(x).size())
#define db if(1)printf
template<typename C> void MA(C& a,C b){if(a<b)a=b;}
template<typename C> void MI(C& a,C b){if(a>b)a=b;}
#define MAX 201000
int n,m,l;
vector<int> d[MAX];
int deg[MAX];
bool cz[MAX];
void us(int nr){
  if(cz[nr] || deg[nr] >= l)return;
  cz[nr] = 1;
  R(i,SZ(d[nr])){
    deg[d[nr][i]]--;
    us(d[nr][i]);
  }
}
vector<int> ak;
void dfs(int nr){
  if(cz[nr])return;
  cz[nr] = 1;
  ak.PB(nr);
  R(i,SZ(d[nr]))dfs(d[nr][i]);
}
main(){
  make2(n,m);
  make(l);
  R(i,m){
    int a,b;
    make2(a,b);
    a--;b--;
    d[a].PB(b);
    d[b].PB(a);
    deg[a]++;
    deg[b]++;
  }
  R(i,n)us(i);
  vector<int> wyn;
  R(i,n){
    ak.clear();
    dfs(i);
    if(SZ(ak) > SZ(wyn))
      swap(ak,wyn);
  }
  if(SZ(wyn) == 0)
    puts("NIE");
  else{
    printf("%d\n",SZ(wyn));
    sort(ALL(wyn));
    R(i,SZ(wyn))
      printf("%d ",wyn[i]+1);
    puts("");
  }
}