const mod=1000000007; typedef struct{ long long a,b,c; char o; }abc; abc C[1<<18],t,u; idx[1<<17]; CN; N,Q,X,Y,x,y; char T; abc op(char o,abc A,abc B){ abc R; if(o){ if(A.b>=0){ if(B.b>=0){ R.a=A.a; R.b=(A.b+A.c*B.a+B.b)%mod; R.c=B.c; }else{ R.a=A.a; R.b=A.b; R.c=A.c*B.a%mod; } }else{ if(B.b>=0){ R.a=A.c*B.a%mod; R.b=B.b; R.c=B.c; }else{ R.b=-(R.c=R.a=A.c*B.a%mod); } } }else{ R.a=A.a; R.b=(A.b+A.c+B.a+B.b)%mod; R.c=B.c; } R.o=o; return R; } d(i){ if(i<65536){ d(i*2); if(CN>X%2); r(y>>Y%2); }else{ for(;x/2