#include<bits/stdc++.h>typedeflonglongll;usingnamespacestd;/*~~~~~~~~~~~~~~~~~~~ Boundary Line ~~~~~~~~~~~~~~~~~~~*/constllinf=0x3f3f3f3f3f3f3f3f;constintN=1e5+5,M=1e6+5;intn,m;intnxt[N];boolbeg[N];/*~~~~~~~~~~~~~~~~~~~ Boundary Line ~~~~~~~~~~~~~~~~~~~*/namespaceFLOW{intn;ints,t;inttot=1,head[N],ver[M],nxt[M],edg[M],fm[N];voidadd(intx,inty,intz){// cerr<<x<<' '<<y<<' '<<z<<'\n';ver[++tot]=y,edg[tot]=z,fm[tot]=x;nxt[tot]=head[x],head[x]=tot;ver[++tot]=x,edg[tot]=0,fm[tot]=y;nxt[tot]=head[y],head[y]=tot;}lldis[N];boolBFS(){deque<int>q;for(inti=0;i<=n;i++)dis[i]=inf;q.push_back(s),dis[s]=0;while(!q.empty()){intx=q.front();q.pop_front();for(inti=head[x];i;i=nxt[i]){inty=ver[i];if(edg[i]&&dis[y]==inf){dis[y]=dis[x]+1;q.push_back(y);if(y==t)return1;}}}return0;}intcur[N];intdfs(intx,intflow){if(x==t||flow==0)returnflow;intsum=0;for(inti=cur[x];i;i=nxt[i]){inty=ver[i];cur[x]=i;if(edg[i]&&dis[y]==dis[x]+1){intk=dfs(y,min(flow,edg[i]));edg[i]-=k,edg[i^1]+=k;sum+=k,flow-=k;if(flow==0)break;}}if(sum==0)dis[x]=0;returnsum;}intDinic(intss,inttt,intnn){n=nn,s=ss,t=tt;intans=0;while(BFS()){for(inti=0;i<=n;i++)cur[i]=head[i];ans+=dfs(s,inf);}returnans;}voidclear(){tot=1;memset(head,0,sizeofhead);}};usingFLOW::add;/*~~~~~~~~~~~~~~~~~~~ Boundary Line ~~~~~~~~~~~~~~~~~~~*/signedmain(){cin>>n>>m;for(inti=1;i<=m;i++){intx,y;cin>>x>>y;add(x,y+n,1);}for(inti=1;i<=n;i++)add(0,i,1),add(i+n,2*n+1,1);intans=n-FLOW::Dinic(0,2*n+1,2*n+1);for(inti=2;i<=FLOW::tot;i+=2){intx=FLOW::fm[i],y=FLOW::ver[i];if(x>=1&&x<=n&&y>=n+1&&y<=2*n){if(FLOW::edg[i^1]==0)continue;nxt[x]=y-n,beg[y-n]=1;cerr<<x<<' '<<y-n<<'\n';}}for(inti=1;i<=n;i++){if(beg[i])continue;intp=i;while(p){cout<<p<<' ';p=nxt[p];}cout<<'\n';}cout<<ans<<'\n';return0;}
#include<bits/stdc++.h>#define int long longusingnamespacestd;/*~~~~~~~~~~~~~~~~~~~~ Boundary Line ~~~~~~~~~~~~~~~~~~~~*/constintinf=0x3f3f3f3f3f3f3f3f;constintN=105,M=1005;intn,m;boold[N][N];template<intN,intM>structBIG{vector<int>v[N];boolvis[N];booldel[N];intmatch[N];intcho[N];booldfs(intx){if(del[x])return0;for(autoy:v[x]){if(!vis[y]&&!del[y]){vis[y]=1;if(match[y]==-1||dfs(match[y])){match[y]=x,cho[x]=y;return1;}}}return0;}intsolve(){intans=0;memset(match,-1,sizeofmatch);for(inti=1;i<=n;i++){memset(vis,0,sizeofvis);if(dfs(i)&&del[i]==0)ans++;}returnans;}};BIG<N*2,N*N+2*N>nt;/*~~~~~~~~~~~~~~~~~~~~ Boundary Line ~~~~~~~~~~~~~~~~~~~~*//*~~~~~~~~~~~~~~~~~~~~ Boundary Line ~~~~~~~~~~~~~~~~~~~~*/signedmain(){cin>>n>>m;for(inti=1;i<=m;i++){intx,y;cin>>x>>y;if(x==y)continue;d[x][y]=1;}// 传递闭包for(inti=1;i<=n;i++)for(intj=1;j<=n;j++)for(intk=1;k<=n;k++)d[i][j]|=(d[i][k]&d[k][j]);for(inti=1;i<=n;i++)for(intj=1;j<=n;j++)for(intk=1;k<=n;k++)d[i][j]|=(d[i][k]&d[k][j]);for(inti=1;i<=n;i++)for(intj=1;j<=n;j++)for(intk=1;k<=n;k++)d[i][j]|=(d[i][k]&d[k][j]);for(inti=1;i<=n;i++)for(intj=1;j<=n;j++)if(d[i][j])nt.v[i].push_back(j);intans=n-nt.solve();cout<<ans<<'\n';vector<int>ans2;for(inti=1;i<=n;i++){intcnt=0;for(intj=1;j<=n;j++)if(d[i][j]||d[j][i]||i==j)nt.del[j]=1;elsent.del[j]=0,cnt++;ans2.push_back(cnt-nt.solve()==ans-1);}bitset<N>vis(0);for(inti=1;i<=n;i++){if(ans2[i-1]&&vis[i]==0){vis[i]=1;for(intj=1;j<=n;j++)if(d[i][j]||d[j][i]||i==j)vis[j]=1;cout<<1;}elsecout<<0;}cout<<'\n';for(autox:ans2)cout<<x;return0;}