#include <stdio.h>
#include <time.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
#include <map> 
#include <string>
#include <vector>  
#include <iostream> 
#include <sstream>  
#include <queue> 
#include <algorithm>

using namespace std;
 
#define ll long long
#define PB 		push_back
#define FOR(a,start,end) 	for(int a=int(start); a<int(end); a++)
#define INF 		INT_MAX
#define SORT(a) 	sort(a.begin(),a.end()) 
#define CL(a,x) 		memset(a,x,sizeof(a))
#define REP(a,x)	for(int a=0;a<x;a++)
#define REP1(a,x)	for(int a=1;a<=x;a++)
#define MP 		make_pair

 
 
typedef vector<int>     vi;
typedef pair<int,int>     pii; 
typedef vector<string> vs;
typedef vector<pii> vii;
typedef vector<vector<int> > vvi;
typedef vector<vector<string> > vvs;
typedef vector<pair<string,string> > vss;
typedef pair<string,string> pss; 
typedef pair<int,pii> piii;
typedef vector<piii> viii;
typedef vector<vector<pii> > vvii;
typedef vector<vvi> vvvi;

int m,z,i,j,k,n,a,b,i0,d,k1,k0,ilc,i1,ilk;
vi vk,va,vp,vk1,vk2,vpk1,vpk2,vb,vlk,vlk2;
vvi vvk,vvc,vvk2,vvl,vvl2,vvlk,vvlk2;

void dalej(int i0){
	int a,j,i,z;
	vi vk;

	for(j=0;j<vvk[i0].size();j++){
		va[i0]=k;
		a=vvk[i0][j];
		
		if(va[a]==k){
					//cykl
			if(vp[a]==0)
						vp[a]=i0;
			i=i0;
			vk.clear();
			vk.push_back(a);
			while(i!=a&&i>0){
				vk.push_back(i);
				i=vp[i];
			}
			if(i==a)
				vvc.push_back(vk);
			
		//	va[i0]=k+1;
		}
		else {
			vp[a]=i0;
			va[a]=k;
			dalej(a);
			
			
		}
		//k++;
	}
	
}
void dal(int a){
	int i0,j;
	for(i0=0;i0<vvk[a].size();i0++){
		vpk2[a]--;
			j=vvk[a][i0];
			vpk1[j]--;
			if(vpk1[j]<1&&vpk2[j]>0)
				dal(j);
	}
}
void dal2(int a){
	int i0,j;
	for(i0=0;i0<vvk2[a].size();i0++){
		vpk1[a]--;
			j=vvk2[a][i0];
			vpk2[j]--;
			if(vpk2[j]<1&&vpk1[j]>0)
				dal2(j);
	}
}
int main() {   
//	freopen( "c:\\wojtek\\uva\\pa\\debug\\t5.in", "rt", stdin);  
	
	//pi=2*acos(0.0);
	
	cin>>n>>m; 
	vk.clear();
	vvk.assign(n+1,vk); 
	vvk2.assign(n+1,vk);
	vvc.clear();
	vpk1.assign(n+1,0);
	vpk2.assign(n+1,0);
	for(i=0;i<m;i++){
		cin>>a>>b;
		vvk[a].push_back(b);
		vvk2[b].push_back(a);
		vpk2[a]++;
		vpk1[b]++;
	}
	// eliminowanie liści

	for(i=1;i<=n;i++){
		if(vpk1[i]<1&&vpk2[i]>0){
			a=i;
			for(i0=0;i0<vvk[a].size();i0++){
				vpk2[a]--;
				j=vvk[a][i0];
				vpk1[j]--;
				if(vpk1[j]<1&&vpk2[j]>0)
					dal(j);
			}
		}
	}

	for(i=1;i<=n;i++){
		if(vpk2[i]<1&&vpk1[i]>0){
			a=i;
			for(i0=0;i0<vvk2[a].size();i0++){
				vpk1[a]--;
				j=vvk2[a][i0];
				vpk2[j]--;
				if(vpk2[j]<1&&vpk1[j]>0)
					dal2(j);
			}
		}
	}
// porządkowanie
	vk.clear();
	vvl.assign(n+1,vk);
	vvl2.assign(n+1,vk);
	for(i=1;i<=n;i++){
		if(vpk1[i]>=1&&vpk2[i]>=1){
			for(j=0;j<vvk[i].size();j++){
				a=vvk[i][j];
				if(vpk1[a]>0&&vpk2[a]>0)
					vvl[i].push_back(a);
			}
		}
	}
	vb.clear();
	for(i=1;i<=n;i++){
		if(vpk1[i]>=1&&vpk2[i]>=1){
			vb.push_back(i);
			for(j=0;j<vvk2[i].size();j++){
				a=vvk2[i][j];
				if(vpk1[a]>0&&vpk2[a]>0)
					vvl2[i].push_back(a);
			}
		}
	}
	vvk.swap(vvl);
	vvk2.swap(vvl2);
	//trezba dołożyć eliminację pustych cykli

	//

	//vvk i vvk2 czyste. vb - lista aktywnych skrzyżowań
	
	if(vb.size()==0)
		cout<<"NIE"<<endl;
	else {
		//teraz ilość cykli
		ilc=1;
		va.assign(n+1,0);
		for(i0=0;i0<vb.size();i0++){
			i=vb[i0];
			ilc+=vpk2[i]-1;
		}
		//teraz któe skrz maja ilc
		//
		vlk.clear();
		vlk2.clear();
		vvlk.assign(n+1,vlk);
		vvlk2.assign(n+1,vlk);
//		vlk.assign(n+1,0);
		vk1.clear();
		ilk=0;
		//vpk1 - przychodzĄCE
		//VPK2 - WYCHODZĄCE
		//vvk - wychodzące
		//vvk2 - przychodzące

		for(i0=0;i0<vb.size();i0++){
			i=vb[i0];
			if(vpk1[i]>1){
				for(int i2=0;i2<vvk2[i].size();i2++){
					i1=vvk2[i][i2];
					j=i1;
					while(vpk2[j]==1&&vpk1[j]==1)
						j=vvk2[j][0];
					if(vpk2[j]>1&&vvlk[j].size()<vvk[j].size()){
						vlk.push_back(1);
						vvlk[j].push_back(ilk);
						if(vvlk[j].size()==vvk[j].size())
							vk1.push_back(j);
						
						vlk2.push_back(1);
						vvlk2[i].push_back(ilk);
						ilk++;
					}
				}
			}
		}
		//teraz dodajemy
		vk2.clear();
		while(vk1.size()>0){
			for (i0=0;i0<vk1.size();i0++){
				i=vk1[i0];
				b=0;
				for(i1=0;i1<vvlk[i].size();i1++){
					b+=vlk[vvlk[i][i1]];
				}
				
				if(vvk2[i].size()==1){
					i1=vvk2[i][0];
					j=i1;
					while(vpk2[j]==1&&vpk1[j]==1)
						j=vvk2[j][0];
					if(vvlk[j].size()<vvk[j].size()){
						vlk.push_back(b);
						vvlk[j].push_back(ilk);
						if(vvlk[j].size()==vvk[j].size())
							vk2.push_back(j);
						vlk2.push_back(b);
						vvlk2[i].push_back(ilk);
						ilk++;
					}
					

				}
				
			}
			vk1.swap(vk2);
			vk2.clear();
		}
		vk.clear();
		for(i0=0;i0<vb.size();i0++){
			i=vb[i0];
			if(vvk[i].size()>1){
				b=0;
				for(i1=0;i1<vvlk[i].size();i1++)
					b+=vlk[vvlk[i][i1]];
				if(b==ilc){
					vk.push_back(i);
					if(vvk2[i].size()==1){
						j=vvk2[i][0];
						vk.push_back(j);
						while(vvk2[j].size()==1){
							vk.push_back(j);
							j=vvk2[j][0];
						}
					}
				}
			}
		}
		k=vk.size();
		cout<<k<<endl;
		if(k>0){
			SORT(vk);
			cout<<vk[0];
			for(i=1;i<vk.size();i++)
				cout<<" "<<vk[i];
			cout<<endl;
		}
	}
	return 0;

/*
	
	//
	va.assign(n+1,0);
	vp.assign(n+1,0);

	k=0;
	
	for(i0=1;i0<=n;i0++){
		if(va[i0]==0){
			k0=i0;
			va[i0]=++k;
			for(j=0;j<vvk[i0].size();j++){
				a=vvk[i0][j];
				
				if(va[a]==k){
					//cykl
					if(vp[a]==0)
						vp[a]=i0;
					i=i0;
					vk.clear();
					vk.push_back(a);
					while(i!=a&&i>0){
						vk.push_back(i);
						i=vp[i];
					}
					if(i==a)
						vvc.push_back(vk);
				}
				else {
					vp[a]=i0;
					va[a]=k;
					dalej(a);
					
				}
				//k++;
			}
		}
	}
	//vvc - lista cykli
	va.assign(n+1,0);
	k=vvc.size();
	for(i=0;i<k;i++){
		vk=vvc[i];
		for(j=0;j<vk.size();j++){
			va[vk[j]]++;
			if(va[vk[j]]==k)
				vk1.push_back(vk[j]);
		}
	}
	if(k==0)
		cout<<"NIE"<<endl;
	else {
		cout<<vk1.size()<<endl;
		if(vk1.size()>0){
			SORT(vk1);
			cout<<vk1[0];
			for(i=1;i<vk1.size();i++)
				cout<<" "<<vk1[i];
			cout<<endl;
		}
	}
	

	return 0;	
	*/

} 
