import sys input=sys.stdin.readline N=int(input()) n=1 while(n1:#最下段かのチェック lazy[2*k+1]=lazy[k]//2 lazy[2*k+2]=lazy[k]//2 lazy[k]=-1#伝搬終了 def add(a,b,x,k,l,r): eval(k,l,r) if b<=l or r<=a: return if a<=l and r<=b: lazy[k]=(r-l)*x eval(k,l,r) else: add(a,b,x,2*k+1,l,(l+r)//2) add(a,b,x,2*k+2,(l+r)//2,r) dat[k]=dat[2*k+1]+dat[2*k+2] dat1=[INF]*(2*n-1) lazy1=[0]*(2*n-1) def find1(a,b,k,l,r): if r<=a or b<=l: return INF eval1(k,l,r) if a<=l and r<=b: return dat1[k] else: vl=find1(a,b,k*2+1,l,(l+r)//2) vr=find1(a,b,k*2+2,(l+r)//2,r) return vl+vr def eval1(k,l,r): if lazy1[k]!=-1:#遅延配列が0かどうか dat1[k]=lazy1[k] if r-l>1:#最下段かのチェック lazy1[2*k+1]=lazy1[k]//2 lazy1[2*k+2]=lazy1[k]//2 lazy1[k]=-1#伝搬終了 def add1(a,b,x,k,l,r): eval1(k,l,r) if b<=l or r<=a: return if a<=l and r<=b: lazy1[k]=(r-l)*x eval1(k,l,r) else: add1(a,b,x,2*k+1,l,(l+r)//2) add1(a,b,x,2*k+2,(l+r)//2,r) dat1[k]=dat1[2*k+1]+dat1[2*k+2] ap=0 bp=0 Q=int(input()) for i in range(Q): x,l,r=map(int,input().split()) if x==0: f=find1(l,r+1,0,0,n) a=find(l,r+1,0,0,n) b=f-a if a>b: ap+=a elif b>a: bp+=b elif x==1: add(l,r+1,1,0,0,n) add1(l,r+1,1,0,0,n) elif x==2: add(l,r+1,0,0,0,n) add1(l,r+1,1,0,0,n) f=find1(0,N,0,0,n) a=find(0,N,0,0,n) b=f-a ap+=a bp+=b print(ap,bp)