#include #include #include using namespace std; int n, m; int sol[100005], sp[100005], f[100005]; vector > v[100005]; inline int cmp (pair a, pair b) { return a.first < b.first; } int main () { // freopen ("xorgame.in", "r", stdin); // freopen ("xorgame.out", "w", stdout); scanf ("%d %d", &n, &m); int i, x, y, z; for (i = 1; i <= m; i ++) { scanf ("%d %d %d", &x, &y, &z); if (y < x) x ^= y ^= x ^= y; v[y].push_back (make_pair (x, z)); } vector > :: iterator it1, it2; for (i = n; i >= 1; i --) { if (v[i].size() == 0) { continue; } sort (v[i].begin(), v[i].end(), cmp); it1 = v[i].begin(); y = it1 -> first; z = it1 -> second; it2 = it1; ++ it2; for (; it2 != v[i].end(); it1 ++, it2 ++) { x = it1 -> second ^ it2 -> second; v[it2 -> first - 1].push_back (make_pair (it1 -> first, x)); y = it2 -> first; z = it2 -> second; } if (v[i].size()) { vector > ().swap (v[i]); v[i].push_back (make_pair (y, z)); f[i] = 1; } else vector > ().swap (v[i]); } for (i = 1; i <= n; i ++) { if (f[i]) { sol[i] = sp[i - 1] ^ sp[v[i][0].first - 1] ^ v[i][0].second; } else sol[i] = 0; sp[i] = sp[i - 1] ^ sol[i]; printf ("%d ", sol[i]); } return 0; }