#include<bits/stdc++.h>
using namespace std;
int cnt=0,n,m,x,y;
bool ff=0;
int a[10086][10086],b[10086][10086];
bool vis[10086],use[10086],usee[10086];
struct node{
int la,to;
}ans[10086];
void find(int p){
vis[p]=1;
if (a[p][0]==0||a[0][p]==0){
ans[p].la=ans[p].to=p;
return;
}
for (int i=1;i<=a[p][0];i++){
if (vis[a[p][i]]){
if (ans[a[p][i]].to!=0){
ans[p].to=ans[a[p][i]].to;
ans[p].la=a[p][i];
ans[ans[a[p][i]].to].la=p;
ans[a[p][i]].to=p;
return;
}
ff=1;
ans[p].to=a[p][i];
ans[a[p][i]].la=p;
return;
}
find(a[p][i]);
if (ff){
if (ans[p].la!=0) ff=0;
ans[p].to=a[p][i];
ans[a[p][i]].la=p;
return;
}
}
return;
}
void print2(int u){
for (int i=1;i<=n;i++){
if (i==u) continue;
if (b[i][ans[u].to]&&b[u][i]){
int start=ans[i].to;
ans[ans[u].to].la=i;
ans[start].la=u;
ans[i].to=ans[u].to;
ans[u].to=start;
}
}
return;
}
void print1(int u){
use[u]=1;
if (use[ans[u].to]){
cnt++;
return;
}
print1(ans[u].to);
return;
}
void print(int u){
usee[u]=1;
if (usee[ans[u].to]){
cout<<u<<endl;
return;
}
cout<<u<<" ";
print(ans[u].to);
return;
}
int main(){
scanf("%d%d",&n,&m);
for (int i=1;i<=m;i++){
scanf("%d%d",&x,&y);
a[x][++a[x][0]]=y;
a[0][y]++;
b[x][y]=1;
}
for (int i=1;i<=n;i++){
if (vis[i]) continue;
ff=0;
find(i);
}
for (int i=1;i<=n;i++){
print2(i);
}
use[0]=1;
for (int i=1;i<=n;i++){
if (use[i]) continue;
print1(i);
}
cout<<cnt<<endl;
usee[0]=1;
for (int i=1;i<=n;i++){
if (usee[i]) continue;
print(i);
}
return 0;
}