#define M 1000000007 typedef struct{ int val; int type; int range_l; int range_r; int child_l; int child_r; int nc; } N; N ns[101010]; int nn; ops[101010]; int insadd(int i,int d){ N*p=ns+i; if(p->type=='a'){ if(ns[p->child_l].nc>ns[p->child_r].nc){ p->child_r=insadd(p->child_r,d); p->range_r++; p->nc=ns[p->child_l].nc+ns[p->child_r].nc+2; p->val=(ns[p->child_l].val+ns[p->child_r].val)%M; return i; } } { N*pl=ns+nn++; pl->type='l'; pl->val=d; pl->range_l=p->range_r; pl->range_r=p->range_r+1; pl->nc=0; N*pm=ns+nn++; pm->type='a'; pm->child_l=i; pm->child_r=nn-2; pm->range_l=p->range_l; pm->range_r=p->range_r+1; pm->nc=p->nc+2; pm->val=(p->val+d)%M; return nn-1; } } int insmul(int i,int d){ N*p=ns+i; if(p->type=='a'){ p->child_r=insmul(p->child_r,d); p->range_r++; p->nc=ns[p->child_l].nc+ns[p->child_r].nc+2; p->val=(ns[p->child_l].val+ns[p->child_r].val)%M; return i; } if(p->type=='m'){ if(ns[p->child_l].nc>ns[p->child_r].nc){ p->child_r=insmul(p->child_r,d); p->range_r++; p->nc++; p->val=1ll*ns[p->child_l].val*ns[p->child_r].val%M; return i; } } { N*pl=ns+nn++; pl->type='l'; pl->val=d; pl->range_l=p->range_r; pl->range_r=p->range_r+1; pl->nc=0; N*pm=ns+nn++; pm->type='m'; pm->child_l=i; pm->child_r=nn-2; pm->range_l=p->range_l; pm->range_r=p->range_r+1; pm->nc=p->nc+2; pm->val=1ll*p->val*d%M; return nn-1; } } int getv(int j,int i){ N*p; while(p=ns+i,p->type!='l'){ if(jchild_l].range_r){ i=p->child_l; }else{ i=p->child_r; } } return p->val; } void setv(int j,int d,int i){ N*p=ns+i; if(p->type=='l'){ p->val=d; }else{ if(jchild_l].range_r){ setv(j,d,p->child_l); }else{ setv(j,d,p->child_r); } if(p->type=='m'){ p->val=1ll*ns[p->child_l].val*ns[p->child_r].val%M; }else{ p->val=(ns[p->child_l].val+ns[p->child_r].val)%M; } } } mtoa(j,i){ N*p=ns+i; if(ns[p->child_l].range_r>j){ p->child_l=mtoa(j,p->child_l); if(p->type=='m'&&ns[p->child_l].type=='a'){ int ia=p->child_l; N*pa=ns+ia; p->child_l=pa->child_r; p->range_l=ns[p->child_l].range_l; p->val=1ll*ns[p->child_l].val*ns[p->child_r].val%M; pa->child_r=i; pa->range_r=p->range_r; pa->val=(ns[pa->child_l].val+p->val)%M; return ia; }else{ p->val=1ll*ns[p->child_l].val*ns[p->child_r].val%M; return i; } } if(ns[p->child_r].range_lchild_r=mtoa(j,p->child_r); if(p->type=='m'&&ns[p->child_r].type=='a'){ int ia=p->child_r; N*pa=ns+ia; p->child_r=pa->child_l; p->range_r=ns[p->child_r].range_r; p->val=1ll*ns[p->child_l].val*ns[p->child_r].val%M; pa->child_l=i; pa->range_l=p->range_l; pa->val=(p->val+ns[ns[ia].child_r].val)%M; return ia; }else{ p->val=1ll*ns[p->child_l].val*ns[p->child_r].val%M; return i; } } p->type='a'; p->val=(ns[p->child_l].val+ns[p->child_r].val)%M; return i; } atom_i(i){ N*p=ns+i; if(ns[p->child_l].type=='a'&&(ns[p->child_r].type!='a'||ns[p->child_l].nc<=ns[p->child_r].nc)){ int ia=p->child_l; N*pa=ns+ia; p->child_l=pa->child_r; p->range_l=ns[p->child_l].range_l; pa->child_r=atom_i(i); pa->range_r=ns[p->child_r].range_r; pa->val=(ns[pa->child_l].val+ns[pa->child_r].val)%M; return ia; } if(ns[p->child_r].type=='a'){ int ia=p->child_r; N*pa=ns+ia; p->child_r=pa->child_l; p->range_r=ns[p->child_r].range_r; pa->child_l=atom_i(i); pa->range_l=ns[pa->child_l].range_l; pa->val=(ns[pa->child_l].val+ns[pa->child_r].val)%M; return ia; } p->val=1ll*ns[p->child_l].val*ns[p->child_r].val%M; return i; } int atom(int j,int i){ N*p=ns+i; if(ns[p->child_l].range_r>j){ p->child_l=atom(j,p->child_l); p->val=(ns[p->child_l].val+ns[p->child_r].val)%M; return i; } if(ns[p->child_r].range_lchild_r=atom(j,p->child_r); p->val=(ns[p->child_l].val+ns[p->child_r].val)%M; return i; } p->type='m'; return atom_i(i); } int f(int l,int r,int i){ N*p=ns+i; if(l<=p->range_l&&r>=p->range_r){ return p->val; } if(r<=ns[p->child_l].range_r){ return f(l,r,p->child_l); } if(l>=ns[p->child_r].range_l){ return f(l,r,p->child_r); } { int vl=f(l,r,p->child_l); int vr=f(l,r,p->child_r); return p->type=='m' ? 1ll*vl*vr%M : (vl+vr)%M; } } main(n,q,i,c,d,t,x,y){ int root=0; scanf("%d",&n); scanf("%d",&d); { N*p=ns+nn++; p->val=d; p->type='l'; p->range_l=0; p->range_r=1; p->child_l=0; p->child_r=0; p->nc=0; } for(i=1;i