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

using namespace std;

vector<int> tab[500001], ans;

int n, m, x, y;
bool met[500001], jest[500001], cykl;

void dfs( int w )
{
	met[w] = 1;
	jest[w] = 1;
	for( int a = 0; a < tab[w].size(); a++ )
	{
		if( met[ tab[w][a] ] )
		{
			if( jest[ tab[w][a] ] )cykl = 1;
		}
		else dfs( tab[w][a] );
	}
	jest[w] = 0;
}
int main()
{
	ios_base::sync_with_stdio( 0 );
	cin>>n>>m;
	for( int a = 1; a <= m; a++ )
	{
		cin>>x>>y;
		tab[x].push_back( y );
	}
	dfs( 1 );
	if( cykl )
	{
		for( int a = 1; a <= n; a++ )met[a] = 0;
		cykl = 0;
		for( int a = 1; a <= n; a++ )
		{
			met[a] = 1;
			for( int b = 1; b <= n; b++ )
			{
				if( !met[b] )dfs( b );
			}
			if( !cykl )ans.push_back( a );
			for( int b = 1; b <= n; b++ )met[b] = 0;
			cykl = 0;
		}
		if( ans.size() )
		{
			cout<<ans.size()<<endl;
			for( int a = 0; a < ans.size(); a++ )cout<<ans[a]<<" ";
		}
		else cout<<"0";
	}
	else cout<<"NIE";
	return 0;
}