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
107
108
109
110
111
#include<cstdio>
#include<algorithm>
#include<vector>
#include<set>
#include<map>
#include<queue>
#include<cmath>
#include<iostream>
#include<string>
using namespace std;
#define F first
#define S second
#define MP make_pair
#define PB push_back
#define LL long long
#define PII pair<int, int>
#define PLL pair<LL, LL>
const int M=200005;

int n, m, d, res, resv;
vector<int> V[M];
vector<PII> E;
bool B[M];
int in[M], T[M];
queue<int> Q;

int DFS(int v, int ind)
{
	T[v]=ind;
	B[v]=1;
	int s=1;
	for(int i=0; i<(int)V[v].size(); i++)
		if(!B[V[v][i]])
			s+=DFS(V[v][i], ind);
	return s;
}

int main()
{
	//ios_base::sync_with_stdio(0);
	scanf("%d%d%d", &n, &m, &d);
	//printf("%d %d %d\n", n, m, d);
	for(int i=0; i<m; i++)
	{
		int a, b;
		scanf("%d%d", &a, &b);
		E.PB(MP(a, b));
		V[a].PB(b);
		V[b].PB(a);
		in[a]++;
		in[b]++;
	}
	for(int i=1; i<=n; i++)
	{
		if(in[i]<d)
		{
			Q.push(i);
			B[i]=1;
		}
	}
	while(!Q.empty())
	{
		int v=Q.front();
		Q.pop();
		for(int i=0; i<(int)V[v].size(); i++)
		{
			if(!B[V[v][i]])
			{
				in[V[v][i]]--;
				if(in[V[v][i]]<d)
				{
					Q.push(V[v][i]);
					B[V[v][i]]=1;
				}
			}
		}
	}
	for(int i=1; i<=n; i++)
		V[i].clear();
	for(int i=0; i<m; i++)
	{
		if(!B[E[i].F] && !B[E[i].S])
		{
			V[E[i].F].PB(E[i].S);
			V[E[i].S].PB(E[i].F);
		}
	}
	for(int i=1; i<=n; i++)
	{
		if(!B[i])
		{
			int r=DFS(i, i);
			if(res<r)
			{
				res=r;
				resv=i;
			}
		}
	}
	if(res==0)
		printf("NIE\n");
	else
	{
		printf("%d\n", res);
		for(int i=1; i<=n; i++)
			if(T[i]==resv)
				printf("%d ", i);
		printf("\n");
	}
	return 0;
}