#include #include #include #include #include #include #include #define maxn 100005 using namespace std; int n,m; int viz[maxn],val[maxn]; vector< pair >G[maxn]; void dfs ( int nod ){ viz[nod] = 1; for ( vector< pair >::iterator itt = G[nod].begin() ; itt != G[nod].end() ; ++itt ){ int vecin = itt->first,xorval = itt->second; if ( !viz[vecin] ){ val[vecin] = val[nod]^xorval; dfs(vecin); } else{ assert(val[vecin] == (val[nod]^xorval)); } } } int main () { #ifndef ONLINE_JUDGE freopen("a.in","r",stdin); freopen("a.out","w",stdout); #endif scanf("%d %d",&n,&m); int x,y,vall; for ( int i = 1 ; i <= m ; ++i ){ scanf("%d %d %d",&x,&y,&vall); G[x-1].push_back(make_pair(y,vall)); G[y].push_back(make_pair(x-1,vall)); } for ( int i = 0 ; i <= n ; ++i ){ if ( !viz[i] ){ dfs(i); } } for ( int i = 1 ; i <= n ; ++i ){ val[i] ^= val[i-1]; printf("%d",val[i]); if ( i != n ) printf(" "); } printf("\n"); return 0; }