#include using namespace std; struct S{ vector> vec; void init(int l,int r,vector idx,vector&A,int C){ vec.clear(); vector cnt(r-l); int now=0; int R=0; for(int i=0;i p={l,0}; assert(lower_bound(vec.begin(),vec.end(),p)!=vec.end()); return lower_bound(vec.begin(),vec.end(),p)->second; } }; S dp[3][400009]; int main(){ int n;cin>>n; vector a(n);for(auto&&e:a)cin>>e; vector idx(n);for(int i=0;i vec)->void { for(int i=1;i<=3;i++){ dp[i-1][p].init(l,r,vec,a,i); } if(r-l==1)return; vector lvec,rvec; int m=(l+r)/2; for(auto&&e:vec){ if(a[e]>q; int res_prev=0; while(q--){ int alpha,beta;cin>>alpha>>beta; int l=res_prev^alpha,r=res_prev^beta; l--; array v; for(int i=1;i<=3;i++){ auto search=[&](auto search,int L,int R,int p)->int { if(dp[i-1][p].query(l)