#include using namespace std; typedef long long ll; const int M = 1 << 19; ll n, q; int op[150005]; ll lo[150005], ro[150005]; ll v[M + 5]; int vn; ll va[5][M * 2]; ll to[5][M * 2]; char cl[5][M * 2]; ll bs[5]; ll mo = 1000000000000000009LL; void dc(int id, int x) { if (x < 2 * M) { cl[id][x] = 1; va[id][x] = 0; to[id][x] = 0; } } ll gv(int id, int x, int y, int l, int r, int k) { if (r <= x || y <= l) return 0; if (cl[id][k]) return 0; if (x <= l && r <= y) return to[id][k]; x = max(x, l); y = min(y, r); return va[id][k] * (v[y] - v[x]) + gv(id, x, y, l, (l + r) / 2, 2 * k) + gv(id, x, y, (l + r) / 2, r, 2 * k + 1); } void cr(int id, int x, int y, int l, int r, int k) { if (r <= x || y <= l) return; if (cl[id][k]) return; if (x <= l && r <= y) { cl[id][k] = 1; va[id][k] = 0; to[id][k] = 0; } else { if (cl[id][2 * k]) { cl[id][2 * k] = 0; va[id][2 * k] = 0; to[id][2 * k] = 0; dc(id, 4 * k); dc(id, 4 * k + 1); } if (cl[id][2 * k + 1]) { cl[id][2 * k + 1] = 0; va[id][2 * k + 1] = 0; to[id][2 * k + 1] = 0; dc(id, 4 * k + 2); dc(id, 4 * k + 3); } va[id][2 * k] += va[id][k]; to[id][2 * k] += va[id][k] * (v[(l + r) / 2] - v[l]); va[id][2 * k + 1] += va[id][k]; to[id][2 * k + 1] += va[id][k] * (v[r] - v[(l + r) / 2]); va[id][k] = 0; cr(id, x, y, l, (l + r) / 2, 2 * k); cr(id, x, y, (l + r) / 2, r, 2 * k + 1); to[id][k] = to[id][2 * k] + to[id][2 * k + 1]; } } void ic(int id, int x, int y, int l, int r, int k) { if (r <= x || y <= l) return; if (cl[id][k]) { dc(id, 2 * k); dc(id, 2 * k + 1); cl[id][k] = 0; va[id][k] = 0; to[id][k] = 0; } if (x <= l && r <= y) { va[id][k]++; to[id][k] += v[r] - v[l]; } else { ic(id, x, y, l, (l + r) / 2, 2 * k); ic(id, x, y, (l + r) / 2, r, 2 * k + 1); to[id][k] = va[id][k] * (v[r] - v[l]) + to[id][2 * k] + to[id][2 * k + 1]; } } int main() { ios::sync_with_stdio(0); cin.tie(0); cin >> n >> q; vn = 0; v[vn++] = 0; v[vn++] = n + 3; for (int i = 0; i < q; i++) { cin >> op[i] >> lo[i] >> ro[i]; lo[i]++; ro[i]++; v[vn++] = lo[i]; v[vn++] = ro[i] + 1; } sort(v, v + vn); vn = unique(v, v + vn) - v; while (vn < M + 5) v[vn++] = v[vn - 1]; for (int i = 0; i < q; i++) { int p1 = lower_bound(v, v + vn, lo[i]) - v; int p2 = lower_bound(v, v + vn, ro[i] + 1) - v; if (op[i] == 0) { ll bo[5] = {0}; int bi = 0; for (int j = 0; j < 5; j++) { bo[j] = gv(j, p1, p2, 0, M, 1); if (bo[j] > bo[bi]) bi = j; } for (int j = 0; j < 5; j++) { if (bi >= 0 && j != bi && bo[j] == bo[bi]) bi = -1; } if (bi != -1) { bs[bi] = (bs[bi] + bo[bi]) % mo; } } else { for (int j = 0; j < 5; j++) { if (op[i] == j + 1) { ic(j, p1, p2, 0, M, 1); } else { cr(j, p1, p2, 0, M, 1); } } } } for (int i = 0; i < 5; i++) { cout << ((bs[i] + gv(i, 0, M, 0, M, 1)) % mo) << " \n"[i == 4]; } return 0; }