#include using namespace std; using Int = long long; template inline void chmin(T1 &a,T2 b){if(a>b) a=b;} template inline void chmax(T1 &a,T2 b){if(a struct SegmentTree{ using F = function; using G = function; using H = function; Int n,height; F f; G g; H h; T ti; E ei; vector dat; vector laz; SegmentTree(F f,G g,H h,T ti,E ei): f(f),g(g),h(h),ti(ti),ei(ei){} void init(Int n_){ n=1;height=0; while(n &v){ Int n_=v.size(); init(n_); for(Int i=0;i>i); } inline void recalc(Int k){ while(k>>=1) dat[k]=f(reflect((k<<1)|0),reflect((k<<1)|1)); } void update(Int a,Int b,E x){ thrust(a+=n); thrust(b+=n-1); for(Int l=a,r=b+1;l>=1,r>>=1){ if(l&1) laz[l]=h(laz[l],x),l++; if(r&1) --r,laz[r]=h(laz[r],x); } recalc(a); recalc(b); } void set_val(Int a,T x){ thrust(a+=n); dat[a]=x;laz[a]=ei; recalc(a); } T query(Int a,Int b){ thrust(a+=n); thrust(b+=n-1); T vl=ti,vr=ti; for(Int l=a,r=b+1;l>=1,r>>=1) { if(l&1) vl=f(vl,reflect(l++)); if(r&1) vr=f(reflect(--r),vr); } return f(vl,vr); } }; template vector compress(vector v){ sort(v.begin(),v.end()); v.erase(unique(v.begin(),v.end()),v.end()); return v; } template map dict(const vector &v){ map res; for(Int i=0;i<(Int)v.size();i++) res[v[i]]=i; return res; } //INSERT ABOVE HERE signed main(){ Int n,q; scanf("%lld %lld",&n,&q); vector xs(q),ls(q),rs(q); for(Int i=0;i vs({0,n}); for(Int i=0;i; using E = tuple; const Int MOD = Int(1e18)+Int(9); auto add=[&](Int a,Int b){a+=b;return a>=MOD?a-MOD:a;}; auto mul=[&](Int a,Int b){ Int r=0; while(b){ if(b&1) r=add(r,a); a=add(a,a); b>>=1; } return r; }; T ti(0,0,0,0,0,0); E ei(1,0,0); auto f=[&](T x,T y){ Int xa,xb,xc,xd,xe,xs; tie(xa,xb,xc,xd,xe,xs)=x; Int ya,yb,yc,yd,ye,ys; tie(ya,yb,yc,yd,ye,ys)=y; return T(add(xa,ya),add(xb,yb),add(xc,yc), add(xd,yd),add(xe,ye),add(xs,ys)); }; auto g=[&](T x,E y){ assert(y!=ei); Int xa,xb,xc,xd,xe,xs; tie(xa,xb,xc,xd,xe,xs)=x; Int yf,yt,ys; tie(yf,yt,ys)=y; assert(yt!=0&&ys!=0); if(yt==0) return x; Int v=mul(xs,ys); yf=0; if(yt==1) return T(add(yf*xa,v),0,0,0,0,xs); if(yt==2) return T(0,add(yf*xb,v),0,0,0,xs); if(yt==3) return T(0,0,add(yf*xc,v),0,0,xs); if(yt==4) return T(0,0,0,add(yf*xd,v),0,xs); if(yt==5) return T(0,0,0,0,add(yf*xe,v),xs); assert(0); return x; }; auto h=[&](E x,E y){ assert(y!=ei); if(x==ei) return y; Int xf,xt,xs; tie(xf,xt,xs)=x; Int yf,yt,ys; tie(yf,yt,ys)=y; assert(yt!=0&&ys!=0); return E(xf&&yf&&(xt==yt),yt,add((xt==yt)*xs,ys)); }; SegmentTree seg(f,g,h,ti,ei); vector vt; for(Int i=0;i+1<(Int)vs.size();i++) vt.emplace_back(0,0,0,0,0,vs[i+1]-vs[i]); seg.build(vt); Int sa=0,sb=0,sc=0,sd=0,se=0; for(Int i=0;i m; m[a]++;m[b]++;m[c]++;m[d]++;m[e]++; Int v=(--m.end())->first; if(m[v]!=1) continue; if(a==v) sa=add(sa,v); if(b==v) sb=add(sb,v); if(c==v) sc=add(sc,v); if(d==v) sd=add(sd,v); if(e==v) se=add(se,v); } if(x) seg.update(l,r,E(1,x,1)); } Int a,b,c,d,e,s; tie(a,b,c,d,e,s)=seg.query(0,dc[n]); sa=add(sa,a); sb=add(sb,b); sc=add(sc,c); sd=add(sd,d); se=add(se,e); printf("%lld %lld %lld %lld %lld\n",sa,sb,sc,sd,se); return 0; }