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

#define MAXN 200003

using namespace std;

int n,m,d,a,b;
int ilosc,act,best, sasiad;
vector<int> best_vec, lista;

queue<int> Q;

vector<int> V[MAXN];
int st[MAXN];
bool odw[MAXN];

void dfs(int pocz){
	odw[pocz] = 1;
	
	lista.push_back(pocz);
	
	for(int i = 0; i < V[pocz].size(); i++){
		sasiad = V[pocz][i];
		
		if(odw[sasiad] == 0){
			dfs(sasiad);
		}
	}
}

int main(){
	scanf("%d",&n);
	scanf("%d",&m);
	scanf("%d",&d);
	
	for(int i = 0; i < m; i++){
		scanf("%d",&a);
		scanf("%d",&b);
		
		V[a].push_back(b);
		V[b].push_back(a);
	}
	
	for(int i = 1; i <= n; i++){
		st[i] = V[i].size();
		
		if(st[i] < d){
			Q.push(i);
		}
	}
	
	while(!Q.empty()){
		act = Q.front();
		Q.pop();
		
		odw[act] = 1;
		
		for(int i = 0; i < V[act].size(); i++){
			sasiad = V[act][i];
			
			st[sasiad]--;
			
			if(st[sasiad] == (d-1)){
				Q.push(sasiad);
			}
		}	
	}
	
	for(int i = 1; i <= n; i++){
		if(odw[i] == 0){
			dfs(i);
			
			if(lista.size() > best){
				best = lista.size();
				best_vec = lista; //chyba bedzie dzialac
			}
			
			lista.clear();
		}
	}
	
	if(best == 0)printf("NIE\n");
	else{
		printf("%d\n",best_vec.size());
		sort(best_vec.begin(), best_vec.end());
		for(int i = 0; i < best_vec.size(); i++){
			printf("%d ",best_vec[i]);
		}
		printf("\n");
	}

return 0;
}