VI V(100000,-1),X(100000,0); int root(int a){ if(V[a]<0) return a; int p=V[a], r=root(p); V[a]=r; X[a]^=X[p]; return r; } int merge(int r,int c,int y){ int rr=root(r), rc=root(c); if(rr==rc) return X[r]^X[c]^y; if(V[rr]>V[rc]) swap(rr,rc); else if(V[rr]==V[rc]) V[rr]--; V[rc]=r; X[rc]=y^X[c]; return 0; } int main(){ int @N,@M; REP(M){ int @a,@b,@y; if(merge(a-1,b-1,y)) printf("-1\n"), return 0; } rep(i,N) root(i),wt(X[i]); return 0; }