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("??");
		}
	}
}