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

using namespace std;

bool sort_top(vector <vector <int> >& vf, int u)
{
 int lw=0;
 vector <int> p(vf.size(), 0);
 priority_queue <int> q;

	for(unsigned int i=1;i<vf.size();i++)
		if(i!=u)
			for(unsigned int j=0;j<vf[i].size();j++)
					p[vf[i][j]]++;
 
 p[u]=-1;

	for(unsigned int i=1;i<p.size();i++)
		if(p[i]==0)
			q.push(i);

	while(!q.empty())
	{
	 int x=q.top();
	 lw++;
	 p[x]=-1;
	 q.pop();

	    for(unsigned int i=0;i<vf[x].size();i++)
	    {
    	 p[vf[x][i]]--;

		    if(p[vf[x][i]]==0)
				q.push(vf[x][i]);
	    }
	}
	
 return u==0?lw==vf.size()-1:lw==vf.size()-2;
}

int main()
{
	int n, m, l1, l2;
	vector <vector <int> > v;
	vector <int> wyn;
	
	scanf("%d %d", &n, &m);
	v.resize(n+1);
	
	for(int i=0;i<m;i++)
	{
	 scanf("%d %d", &l1, &l2);
	 v[l1].push_back(l2);
	}
	
	if(sort_top(v, 0))
		printf("NIE\n");
	else
	{	
		for(int i=1;i<v.size();i++)
			if(sort_top(v, i))
				wyn.push_back(i);
	
	 sort(wyn.begin(), wyn.end());
	 printf("%d\n", wyn.size());
	 
		for(int i=0;i<wyn.size();i++)
			printf("%d ", wyn[i]);
	
	 printf("\n");
	}
	
	return 0;
}