#include <cstdio>
#include <iostream>
#include <fstream>
#include <vector>
#include <list>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <bitset>
#include <algorithm>
#include <sstream>
#include <iomanip>
#include <cmath>
#include <cstdlib>
#include <cctype>
#include <cstring>
#include <string>
#include <ctime>
#include <cassert>
#include <utility>

using namespace std;

#define MAXN 100005

int N, M, x, y, val;
vector<pair<int, int> > A[MAXN];
bool v[MAXN];
int S[MAXN];

void dfs(int node) {
    v[node] = true;
    for(vector<pair<int, int> > :: iterator it = A[node].begin(); it != A[node].end(); it++)
        if(!v[it->first]) {
            S[it->first] = S[node] ^ it->second;
            dfs(it->first);
        }
}

int main() {
//	freopen("date.in", "r", stdin);
//	freopen("date.out","w", stdout);
	
	scanf("%d %d", &N, &M);
	for(int i = 0; i < M; i++) {
        scanf("%d %d %d", &x, &y, &val);
        A[x - 1].push_back(make_pair(y, val));
        A[y].push_back(make_pair(x - 1, val));
	}
	
	for(int i = 1; i <= N; i++)
        if(!v[i])
            dfs(i);
	
	for(int i = 1; i <= N; i++)
        printf("%d ", S[i] ^ S[i - 1]);
	
	return 0;
}