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
#include <bits/stdc++.h>

using namespace std;

#define int long long

vector<int>v[500001];
int vtd[500001];
int cyklbeg[500001];
int wyn[500001];
vector<int>out;
bool t[500001];

long long cykle;	//wszystkie cykle
long long liczc;	//cykle w serii

struct cross{
	long long ilc;
	int nr;
	cross(long long _ilc, int _nr){
		ilc = _ilc;
		nr = _nr;
	}
};

stack<cross>S;

void DFS(int x, int nn){
	vtd[x] = nn;
	t[x] = 1;
	S.push(cross(liczc, x));
	
	for(int i = 0; i < v[x].size(); i++){
		if(vtd[v[x][i]] == 0){				//idziemy dalej
			DFS(v[x][i], nn);
		}
		else if(vtd[v[x][i]] == nn && t[v[x][i]] == 1){		//spotykamy cykl
			cyklbeg[v[x][i]] -= 1;
			liczc++;
			cykle++;
		}
	}
	t[x] = 0;
	wyn[x] = liczc - S.top().ilc;
	liczc += cyklbeg[x];
	S.pop();
}
#undef int

int main(){
	//ios_base::sync_with_stdio(0);
	
	#define int long long
	
	int n, m;
	//cin >> n >> m;
	scanf("%lld%lld", &n, &m);
	
	for(int i = 0; i < m; i++){
		int a, b;
		//cin >> a >> b;
		scanf("%lld%lld", &a, &b);
		v[a].push_back(b);
	}
	int num = 1;
	for(int i = 1; i <= n; i++){
		if(vtd[i] == 0){
			liczc = 0;
			DFS(i, num);
			num++;
		}
	}
	if(cykle == 0){
		//cout << "NIE" << endl;
		printf("NIE");
	}
	else{
		for(int i = 1; i <= n; i++){
			if(wyn[i] == cykle){
				out.push_back(i);
			}
		}
		//cout << out.size() << endl;
		printf("%d\n", out.size());
		for(int i = 0; i < out.size(); i++){
			//cout << out[i] << " ";
			printf("%lld ", out[i]);
		}
		printf("\n");
	}
	return 0;
}