#include<stdio.h>
#include<set>
#include<vector>
#include<unordered_map>
#include<algorithm>
#include<cstring>
#include<cassert>

#define maxn 100005

using namespace std;

int n,m;
int viz[maxn],val[maxn];
vector< pair<int,int> >G[maxn];

void dfs ( int nod ){
	viz[nod] = 1;
	
	for ( vector< pair<int,int> >::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 ){
		printf("%d",val[i]^val[i-1]);
		if ( i != n )	printf(" ");
	}
	printf("\n");
	
	return 0;
}