#include using namespace std; typedef long long int ll; typedef double ld; typedef pair ii; typedef vector vi; typedef vector vii; #define PB push_back #define FOR(prom, a, b) for ( ll prom = (a); prom < (ll)(b); ++prom ) #define F(a) FOR(i,0,a) #define FF(a) FOR(j,0,a) #define EPS (1e-10) ll N,M; stack st; vector visited; vector result,adj; void dfsSCC(int v,bool first){ visited[v]=true; if(!first)result[result.size()-1].PB(v); for(ll n:adj[v]) if(!visited[n]) dfsSCC(n,first); if(first)st.push(v); } vector strongComponents(vector &g){ N=g.size(); adj=g; visited=vector(N,0); result.clear(); st=stack(); F(N)if(!visited[i])dfsSCC(i,true); vector adjinv(N); F(N)for(ll n:adj[i])adjinv[n].PB(i); swap(adj,adjinv); visited=vector(N,0); while(!st.empty()){ ll v = st.top(); st.pop(); if(!visited[v]){ result.PB(vi()); dfsSCC(v,false); } } return result; } int main () { srand(time(NULL)); ios::sync_with_stdio(false); ll N; while(cin>>N>>M){ vector g(N); vii e(M); F(M){ ll c,b;cin>>c>>b;c--;b--; g[c].PB(b); e[i]={c,b}; } vector res = strongComponents(g); vi comp(N); F(res.size()) for(ll n:res[i]){comp[n]=i;} vi out(res.size()); vi in(res.size()); F(M){ ll ca=comp[e[i].first]; ll cb=comp[e[i].second]; if(ca!=cb){ out[ca]++; in[cb]++; } } vi src,dst; F(res.size()){ if(out[i]==0)src.PB(i); if(in[i]==0)dst.PB(i); } if(src.size()==1&&dst.size()==1&&src[0]==dst[0]){ cout<<0< dag; ll iii=0; vii ans; do{ dag=vector (res.size()); F(M){ ll ca=comp[e[i].first]; ll cb=comp[e[i].second]; if(ca!=cb){ dag[ca].PB(cb); } } ans.clear(); ll i=src.size(),j=dst.size(); if(iii!=0){ random_shuffle(src.begin(),src.end()); random_shuffle(dag.begin(),dag.end()); } iii++; while(i!=0 || j!=0){ if(i!=0)i--; if(j!=0)j--; ll r=comp[res[src[i]][0]]; ll t=comp[res[dst[j]][0]]; dag[r].PB(t); ans.PB({res[src[i]][0]+1,res[dst[j]][0]+1}); } }while(strongComponents(dag).size()!=1); cout<