#include using namespace std; templateistream &operator>>(istream&,pair&); templateistream &operator>>(istream&,tuple&a); templateistream &operator>>(istream&is,vector&a); templateistream &operator>>(istream&is,array&a); template istream &operator>>(istream&is,pair&a){ is>>a.first>>a.second; return is; } template void read_tuple(istream&is,tuple&a){ if constexpr(pos>::value){ is>>get(a); read_tuple(is,a); } } template istream &operator>>(istream&is,tuple&a){ read_tuple<0>(is,a); return is; } template istream &operator>>(istream&is,vector&a){ for(T&x:a)is>>x; return is; } template istream &operator>>(istream&is,array&a){ for(T&x:a)is>>x; return is; } templateostream &operator<<(ostream&os,const pair&); templateostream &operator<<(ostream&os,const tuple&); templateostream &operator<<(ostream&os,const vector&); templateostream &operator<<(ostream&os,priority_queue); templateostream &operator<<(ostream&os,queue); templateostream &operator<<(ostream&os,deque); templateostream &operator<<(ostream&os,stack); templateostream &operator<<(ostream&os,const array&); templateostream &operator<<(ostream&os,const map&); templateostream &operator<<(ostream&os,const unordered_map&); templateostream &operator<<(ostream&os,const set&); templateostream &operator<<(ostream&os,const multiset&); templateostream &operator<<(ostream&os,const unordered_set&); template ostream &operator<<(ostream&os,const pair&a){ os< void write_tuple(ostream&os,const tuple&a){ if constexpr(pos>::value){ if constexpr(pos>0)os<<' '; os<(a); write_tuple(os,a); } } template ostream &operator<<(ostream&os,const tuple&a){ write_tuple<0>(os,a); return os; } template ostream &operator<<(ostream&os,const vector&a){ os<<'{'; for(int i=0;i<(int)a.size();i++){ os< ostream &operator<<(ostream&os,priority_queuea){ os<<'{'; if(!a.empty()){ os< ostream &operator<<(ostream&os,queuea){ os<<'{'; if(!a.empty()){ os< ostream &operator<<(ostream&os,dequea){ os<<'{'; if(!a.empty()){ os< ostream &operator<<(ostream&os,stacka){ os<<'{'; if(!a.empty()){ os< ostream &operator<<(ostream&os,const array&a){ os<<'{'; for(int i=0;i<(int)a.size();i++){ os< ostream &operator<<(ostream&os,const map&a){ if(a.empty()){ os<<"{}"; return os; } auto itr=a.begin(); os<<"{["<first<<","<second<<']'; while(++itr!=a.end())os<<",["<first<<','<second<<']'; os<<'}'; return os; } template ostream &operator<<(ostream&os,const unordered_map&a){ if(a.empty()){ os<<"{}"; return os; } auto itr=a.begin(); os<<"{["<first<<","<second<<']'; while(++itr!=a.end())os<<",["<first<<','<second<<']'; os<<'}'; return os; } template ostream &operator<<(ostream&os,const set&a){ if(a.empty()){ os<<"{}"; return os; } auto itr=a.begin(); os<<'{'<<*itr; while(++itr!=a.end())os<<','<<*itr; os<<'}'; return os; } template ostream &operator<<(ostream&os,const multiset&a){ if(a.empty()){ os<<"{}"; return os; } auto itr=a.begin(); os<<'{'<<*itr; while(++itr!=a.end())os<<','<<*itr; os<<'}'; return os; } template ostream &operator<<(ostream&os,const unordered_set&a){ if(a.empty()){ os<<"{}"; return os; } auto itr=a.begin(); os<<'{'<<*itr; while(++itr!=a.end())os<<','<<*itr; os<<'}'; return os; } using namespace std; using ll=long long; using ull=unsigned long long; using P=pair; templateusing minque=priority_queue,greater>; templatebool chmax(T &a,const T &b){return (abool chmin(T &a,const T &b){return (a>b?(a=b,true):false);} templatevoid operator++(pair&a,int){a.first++,a.second++;} templatevoid operator--(pair&a,int){a.first--,a.second--;} templatevoid operator++(vector&a,int){for(auto &i:a)i++;} templatevoid operator--(vector&a,int){for(auto &i:a)i--;} #define overload3(_1,_2,_3,name,...) name #define rep1(i,n) for(int i=0;i<(int)(n);i++) #define rep2(i,l,r) for(int i=(int)(l);i<(int)(r);i++) #define rep(...) overload3(__VA_ARGS__,rep2,rep1)(__VA_ARGS__) #define reps(i,l,r) rep2(i,l,r) #define all(x) x.begin(),x.end() #define pcnt(x) __builtin_popcountll(x) #define fin(x) return cout<<(x)<<'\n',static_cast(0) #define yn(x) cout<<((x)?"Yes\n":"No\n") #define uniq(x) sort(all(x)),x.erase(unique(all(x)),x.end()) template inline int fkey(vector&z,T key){return lower_bound(z.begin(),z.end(),key)-z.begin();} ll myceil(ll a,ll b){return (a+b-1)/b;} template auto vec(const int (&d)[n],const T &init=T()){ if constexpr (id(d,init)); else return init; } #ifdef LOCAL #include #define SWITCH(a,b) (a) #else #define debug(...) static_cast(0) #define debugg(...) static_cast(0) #define SWITCH(a,b) (b) #endif struct Timer{ clock_t start; Timer(){ start=clock(); ios::sync_with_stdio(false); cin.tie(nullptr); cout<>testcase; for(int i=0;i #include template constexpr std::enable_if_t::digits<=32,int>msb(T n){return n==0?-1:31-__builtin_clz(n);} template constexpr std::enable_if_t<(std::numeric_limits::digits>32),int>msb(T n){return n==0?-1:63-__builtin_clzll(n);} template constexpr std::enable_if_t::digits<=32,int>lsb(T n){return n==0?-1:__builtin_ctz(n);} template constexpr std::enable_if_t<(std::numeric_limits::digits>32),int>lsb(T n){return n==0?-1:__builtin_ctzll(n);} template constexpr std::enable_if_t,T>floor_pow2(T n){return n==0?0:T(1)< constexpr std::enable_if_t,T>ceil_pow2(T n){return n<=1?1:T(1)<<(msb(n-1)+1);} template constexpr T safe_div(T a,T b){return a/b-(a%b&&(a^b)<0);} template constexpr T safe_ceil(T a,T b){return a/b+(a%b&&(a^b)>0);} using Data=array; Data op(Data a,Data b){ Data res; rep(i,30)res[i]=a[i]+b[i]; return res; } Data e(){ Data res; res.fill(0); return res; } Data e2(){ Data res; res.fill(-1); return res; } void act(Data&x,const Data&f,int len){ rep(i,30){ if(f[i]==-1)continue; if(f[i]==0)x[i]=0; else x[i]=len; } } Data op2(Data a,Data b){ swap(a,b); Data res; rep(i,30){ if(a[i]==-1)res[i]=b[i]; else res[i]=a[i]; } return res; } struct Seg{ int z,log2n; vectordat; vectorlazy; vectorflag; vectormoto; vector>his; inline void propagate(int i,const Data&f){ his.emplace_back(0,i); act(dat[i],f,1<<(log2n-msb(i))); if(il;j--)push(i>>j); } inline void path_update(int i){ int l=lsb(i); i>>=(l+1); while(i){ update(i); i>>=1; } } Seg(vectorinit):z(ceil_pow2(init.size()+5)),dat(z*2,e()),lazy(z*2,e2()){ flag.resize(z*2,false); log2n=msb(z); rep(i,init.size())dat[i+z]=init[i]; for(int i=z-1;i>=1;i--)dat[i]=op(dat[i*2],dat[i*2+1]); moto=dat; } void rollback(){ while(!his.empty()){ auto [t,id]=his.back();his.pop_back(); if(t==0)dat[id]=moto[id]; else lazy[id]=e2(),flag[id]=false; } } void apply(int l,int r,Data d){ l+=z,r+=z; path_push(l),path_push(r); int l2=l,r2=r; while(l>=1,r>>=1; } path_update(l2),path_update(r2); } unsigned prod(int l,int r){ Data res=e(); l+=z,r+=z; path_push(l),path_push(r); while(l>=1,r>>=1; } unsigned s=0; rep(i,30)s+=((unsigned)res[i])<>n>>m; vectorinit(n); rep(i,n){ int a; cin>>a; rep(j,30)init[i][j]=a>>j&1; } Seg seg(init); vectorl(m),r(m); cin>>l>>r; vectorx(m),L(m),R(m); cin>>x>>L>>R; int q; cin>>q; for(int i=1;i<=q;i++){ int si,qi; cin>>si>>qi; int y=i; for(int j=1;j<=qi;j++){ int z=(si+j)%m; int u=min(n,max(1,l[z]^y)); int v=min(n,max(1,r[z]^y)); int U=min(n,max(1,L[z]^y)); int V=min(n,max(1,R[z]^y)); int lp=min(u,v); int rp=max(u,v); int LP=min(U,V); int RP=max(U,V); int val=x[z]^y; Data ap; if(z%2==1){ rep(i,30){ if(val>>i&1)ap[i]=1; else ap[i]=-1; } } else{ rep(i,30){ if(val>>i&1)ap[i]=-1; else ap[i]=0; } } seg.apply(lp-1,rp,ap); y=seg.prod(LP-1,RP)&MOD; } cout<