#include #include #include #include using namespace std; #define NMAX 131072 int sum[2 * NMAX]; void Update(int poz, int val) { poz = NMAX + poz - 1; while (poz >= 1) { sum[poz] ^= val; poz >>= 1; } } int Query(int poz) { int ans = 0; if (poz <= 0) return 0; poz = NMAX + poz - 1; while (poz > 1) { if (poz & 1) ans ^= sum[poz - 1]; poz >>= 1; } return ans; } vector > vv[NMAX]; int N, M, x, y, val, i, j; int main() { scanf("%d %d", &N, &M); while (M--) { scanf("%d %d %d", &x, &y, &val); vv[y].push_back(make_pair(x, val)); } for (i = N; i >= 1; i--) { if (vv[i].size() == 0) continue; sort(vv[i].begin(), vv[i].end()); for (j = 0; j + 1 < vv[i].size(); j++) { x = vv[i][j].first; y = vv[i][j + 1].first; if (x == y) continue; vv[y - 1].push_back(make_pair(x, vv[i][j].second ^ vv[i][j + 1].second)); } pair pp = vv[i][vv[i].size() - 1]; vv[i].clear(); vv[i].push_back(pp); } memset(sum, 0, sizeof(sum)); for (i = 1; i <= N; i++) if (vv[i].size() > 0) { x = vv[i][0].first; val = vv[i][0].second; y = Query(i) ^ Query(x); //fprintf(stderr, "i=%d: x=%d y=%d val=%d\n", i, x, y, val); Update(i, y ^ val); } for (i = 1; i <= N; i++) printf("%d ", sum[NMAX + i - 1]); printf("\n"); return 0; }