#include<bits/stdc++.h>
#define FL(i,a,b) for(ll i=(a);i<=(b);i++)
#define FR(i,a,b) for(ll i=(a);i>=(b);i--)
#define ll long long
using namespace std;
const ll MAXN = 1e6 + 10;
const ll MX = 36501;
ll dfn[MAXN],low[MAXN],idx=0;
ll s[MAXN],top=0;
ll scc[MAXN],in[MAXN],siz[MAXN],num=0;
ll f[MAXN];
bool vis[MAXN],val[MAXN];
vector<ll>G[MAXN],E[MAXN],ans;
void tarjan(ll u){
dfn[u]=low[u]=++idx;
vis[u]=1;
s[++top]=u;
for(ll v:G[u]){
if(!dfn[v]){
tarjan(v);
low[u]=min(low[u],low[v]);
}
else if(vis[v]) low[u]=min(low[u],dfn[u]);
}
if(dfn[u]==low[u]){
scc[u]=++num;
siz[num]=1;
vis[u]=0;
while(s[top]!=u){
scc[s[top]]=num;
siz[num]++;
vis[s[top--]]=0;
}
top--;
}
}
signed main(){
ll n,m,mx=0;
scanf("%lld%lld",&n,&m);
FL(i,1,m){
ll u,v;
scanf("%lld%lld",&u,&v);
G[v].push_back(u);
}
FL(i,1,n+1) if(!dfn[i]) tarjan(i);
FL(u,1,n+1){
for(ll v:G[u]){
if(u==v) siz[scc[v]]++;
else if(scc[u]!=scc[v]) E[scc[u]].push_back(scc[v]),in[scc[v]]++;
}
}
val[scc[n+1]]=1,f[scc[n+1]]=(siz[scc[n+1]]>1)?MX:1;
queue<ll>q;
FL(i,1,num) if(!in[i]) q.push(i);
while(!q.empty()){
ll u=q.front();
q.pop();
for(ll v:E[u]){
in[v]--;
if(!in[v]) q.push(v);
if(val[u]) val[v]=1,f[v]+=f[u];
if(siz[v]>1&&val[v]) f[v]=MX;
f[v]=min(f[v],MX);
}
}
FL(i,1,num) if(val[i]) mx=max(mx,f[i]);
FL(i,1,n) if(val[scc[i]]&&f[scc[i]]==mx) ans.push_back(i);
if(mx==MX) puts("zawsze");
else printf("%lld\n",mx);
printf("%lld\n",ans.size());
sort(ans.begin(),ans.end());
for(ll x:ans) printf("%lld ",x);
}