#include using namespace std; struct FastIO{ FastIO(){ iostream::sync_with_stdio(false); cin.tie(nullptr); } } fastio; template struct modint{ int x; modint():x(0){} modint(long long x_){ x_%=mod; if (x_<0) x_+=mod; x=(int)x_; } static modint raw(int x_){ modint ret; ret.x=x_; return ret; } int val()const{return x;} modint& operator+=(const modint &r){ x+=r.x; if (x>=mod) x-=mod; return *this; } modint& operator-=(const modint &r){ x-=r.x; if (x<0) x+=mod; return *this; } modint& operator*=(const modint &r){ x=(int)((long long)x*r.x%mod); return *this; } modint& operator/=(const modint &r){return *this*=r.inv();} friend modint operator+(const modint &l,const modint &r){return modint(l)+=r;} friend modint operator-(const modint &l,const modint &r){return modint(l)-=r;} friend modint operator*(const modint &l,const modint &r){return modint(l)*=r;} friend modint operator/(const modint &l,const modint &r){return modint(l)/=r;} modint operator+()const{return *this;} modint operator-()const{return modint()-*this;} modint& operator++(){ if (++x==mod) x=0; return *this; } modint& operator--(){ if (x--==0) x=mod-1; return *this; } modint operator++(int){ modint ret=*this; if (++x==mod) x=0; return ret; } modint operator--(int){ modint ret=*this; if (x--==0) x=mod-1; return ret; } friend bool operator==(const modint &l,const modint &r){return l.x==r.x;} friend bool operator!=(const modint &l,const modint &r){return l.x!=r.x;} modint inv()const{ int a=mod,b=x,u=0,v=1; while (b){ int q=a/b; swap(a-=q*b,b); swap(u-=q*v,v); } if (u<0) u+=mod; return modint::raw(u); } modint pow(unsigned long long k)const{ modint ret=1,pw=*this; while (k){ if (k&1) ret*=pw; pw*=pw; k>>=1; } return ret; } friend istream &operator>>(istream &is,modint &p){ long long x; is>>x; p=modint(x); return is; } friend ostream &operator<<(ostream &os,const modint &p){return os<; using modint1000000007=modint<1000000007>; template struct XorSegmentTreeNonCommutative{ int n,log; int m; int xorval; vector> table; XorSegmentTreeNonCommutative(int n){ *this=XorSegmentTreeNonCommutative(vector(n,e())); } XorSegmentTreeNonCommutative(vector v){ n=v.size(); log=0; while (1<(n)); table[0]=v; for (int h=1;h<=m;h++) for (int i=0;i>h;i++) update(h,i); } void set(int p,S x){ assert(0<=p&&p>n>>q; vector v(n); for (int i=0;i>v[i].a>>v[i].b; XorSegmentTreeNonCommutative seg(v); while (q--){ int l,r,p,x; cin>>l>>r>>p>>x; seg.operate_xor(p); S ret=seg.prod(l,r); seg.operate_xor(p); mint ans=ret.a*x+ret.b; cout<