int z[2d5]; graph g; void f(int i,int p){ rep[g.edge[i]](j,g.es[i]){ if(j!=p&&!z[j]){ z[j]=~i; f(j,i); } } } { int@n,a[n],b[],r[n+1]; rd((a--,b--)(n)); g.setEdge(n,n,a,b); int m=g.anUndirectedCycle(r); f(r[0],-1); rep(i,m){ z[r[i]]=~r[i+1]; } rep(i,n){ if(z[a[i]]==~b[i]){ wt("->"); }else if(~a[i]==z[b[i]]){ wt("<-"); }else{ wt("??"); } } }