void no(){ wt("No"); exit(0); } { int@n,@m,@k,@(u,v)--[m],r[n],c[n]{},e[n]{},h=0; graph g; g.setDirectEdge(n,m,u,v); int rn=g.scc(r); if(r[0]){ no(); } unionFind d('m',n*2,1); rep(j,m){ if(r[u[j]]==r[v[j]]){ d(u[j],v[j]+n); d(u[j]+n,v[j]); }else if(r[u[j]]+1==r[v[j]]){ h+=!e[u[j]]++; } } if(h!=rn-1){ no(); } rep(i,n){ c[r[i]]+=1; } bool f=true; rep(i,rn){ if(f&&c[i]==1){ no(); } f=c[i]==1; } rep(i,n){ if(c[r[i]]>1&&d(i)!=d(i+n)){ no(); } } wt("Yes"); }