#include #include #include #include #include #include #include #define in cin #define out cout #define abs(x) ((x>0)?(x):(-(x))) #define max(a, b) (a > b ? a : b) #define min(a, b) (a < b ? a : b) #define FOR(i, a, b) for(int i = a; i <= b; ++i) #define DOWNFOR(i, a, b) for(int i = a; i >= b; --i) #define FOREACH(i, t) for (typeof(t.begin()) i = t.begin(); i != t.end(); ++i) #define ll long long using namespace std; const int Nmax = 100005; int Ans[Nmax]; int v[Nmax],s[Nmax]; int T[Nmax]; int N,M; struct initq{ int x,y,val; } Q[Nmax]; struct upd{ int x,y; } R[2][Nmax];int size[2]; vector G[Nmax]; int Query(int x){ int R,y; for(R=x;R!=T[R];R=T[R]); while(x!=T[x]){ y=T[x]; T[x]=R; x=y; } return R; } void Unite(int a,int b){ a=Query(a); b=Query(b); if(a!=b) T[b]=a; } void Flip(int x,int p){ s[x]=p; for(vector::iterator it=G[x].begin();it!=G[x].end();++it){ if(s[*it]==-1) Flip(*it,!p); } } void Reset(){ size[0]=size[1]=0; FOR(i,0,N) G[i].clear(),T[i]=i,s[i]=-1; memset(v,0,sizeof(v)); } void Proc(){ int X,Y; FOR(i,1,size[0]){ X=R[0][i].x; Y=R[0][i].y; Unite(X-1,Y); } FOR(i,1,size[1]){ X=R[1][i].x; Y=R[1][i].y; X=Query(X-1); Y=Query(Y); G[X].push_back(Y); G[Y].push_back(X); } FOR(i,0,N){ int x=Query(i); if(s[x]==-1) Flip(x,0); s[i]=s[x]; } FOR(i,1,N) if(s[i]!=s[i-1]) v[i]=1; } int main(){ #ifndef ONLINE_JUDGE ifstream in("test.in"); ofstream out("test.out"); #endif in>>N>>M; FOR(i,1,M) in>>Q[i].x>>Q[i].y>>Q[i].val; for(int e=1;e<=(1<<20);e<<=1){ Reset(); upd u;int Val; FOR(i,1,M){ u.x=Q[i].x; u.y=Q[i].y; Val=(Q[i].val&e)>0; R[Val][++size[Val]]=u; } Proc(); FOR(i,1,N) Ans[i]+=e*v[i]; } FOR(i,1,N) out<