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
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<vector>
#include<string>
#include<functional>
#include<ctype.h>
#include<map>
#define LL long long
#define LD long double
#define L(x) ((x).size())
#define FI first
#define SE second
#define MP make_pair
#define PB push_back
using namespace std;

int n,m,d,a,b;
vector<int> v[201000];
vector<int> act,s;
vector<int> D;
int nSize[201000];
bool vis[201000];
bool vis2[201000];
bool del[201000];
vector<int> score;
void get_all(int x){
	vis[x] = true;
	act.PB(x);
	if(nSize[x]<d)
		D.PB(x);
	for(int i=0;i<L(v[x]);++i){
		if(!vis[v[x][i]])
			get_all(v[x][i]);
		}
	}
void get_score(int x){
	vis2[x] = true;
	s.PB(x);
	for(int i=0;i<L(v[x]);++i){
		if(!del[v[x][i]] && !vis2[v[x][i]])
			get_score(v[x][i]);
		}
	}
void SORTT();
int SORT_H[500000];
int main(){
	scanf("%d%d%d",&n,&m,&d);
	for(int i=0;i<m;++i){
		scanf("%d%d",&a,&b);
		v[a].PB(b);
		v[b].PB(a);
		++nSize[a];
		++nSize[b];
		}
	for(int i=1;i<=n;++i){
		if(!vis[i]){
			act.clear();
			D.clear();
			s.clear();
			get_all(i);
			for(int j=0;j<L(D);++j){
				a = D[j];
				del[a] = true;
				for(int q=0;q<L(v[a]);++q){
					b = v[a][q];
					nSize[b]--;
					if(nSize[b]==d-1)
						D.PB(b);
					}
				}
			for(int j=0;j<L(act);++j){
				if(!del[act[j]]){
					if(!vis2[act[j]]){
						s.clear();
						get_score(act[j]);
						if(L(s)>L(score)){
							score.clear();
							for(int i=0;i<L(s);++i)
								score.PB(s[i]);
							}
						}
					}
				}
			}
		}
    if(L(score)==0)printf("NIE\n");
    else{
        printf("%d\n",L(score));
        SORTT();
        for(int i=0;i<L(score);++i)
            printf("%d ",score[i]);
        printf("\n");
        }
	}
void SORTT(){
	for(int i=0;i<L(score);++i)
		++SORT_H[score[i]];
	score.clear();
	for(int i=0;i<300000;++i){
		while(SORT_H[i]){
			score.PB(i);
			--SORT_H[i];
			}
		}
	}