#include using namespace std; #include using namespace atcoder; using ll = long long; using P = pair; #define fix(x) fixed << setprecision(x) #define asc(x) x, vector, greater #define rep(i, n) for(ll i = 0; i < n; i++) #define all(x) (x).begin(),(x).end() templatebool chmin(T&a, const T&b){if(a>b){a=b;return 1;}return 0;} templatebool chmax(T&a, const T&b){if(a=0 ? (S){x.val + f*x.siz, x.siz} : (S){0, x.siz}); } F composition(F f, F g){ return (f>=0 ? f + g : -1); } F id(){ return ID; } int main(){ cin.tie(nullptr); ios::sync_with_stdio(false); ll n,q; cin >> n >> q; set se; vector x(q), l(q), r(q); rep(i,q){ cin >> x[i] >> l[i] >> r[i]; x[i]--; r[i]++; se.insert(l[i]); se.insert(r[i]); } map mp; vector vec; ll now = 0, pre = -1; for(ll y:se){ if(pre>=0) vec.push_back({0,y-pre}); pre = y; mp[y] = now++; } vector ans(5,0); vector> seg(5,lazy_segtree(vec)); rep(i,q){ if(x[i]<0){ ll t = -1, p = -1; rep(j,5){ ll k = seg[j].prod(mp[l[i]], mp[r[i]]).val; if(chmax(p, k)) t = j; else if(p==k) t = -1; } if(t>=0) ans[t] = (ans[t] + p) % MOD; }else{ rep(j,5) seg[j].apply(mp[l[i]], mp[r[i]], (x[i]==j)*2-1); } } rep(i,5) cout << (ans[i] + seg[i].all_prod().val) % MOD << " "; cout << '\n'; return 0; }