#include<bits/stdc++.h>
#define int long long
const int N=5e4+5;
using namespace std;
int read(){
int ret=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-f;ch=getchar();}
while(ch>='0'&&ch<='9')ret=ret*10+ch-'0',ch=getchar();
return ret*f;
}
void write(int x){
if(x<0)x=-x,putchar('-');
if(x>9)write(x/10);
putchar(x%10+'0');
}
int n,m,q;
int a[N];
struct anth{
int x;int id;
bool operator <(const anth &B)const{return x<B.x;}
}b[N];
map<int,int> hsh;
map<int,int> mp;
struct node{
int sum;
int pre,suf;
}tree[N<<5];
int vt[N<<2],tot,lst;
int ls[N<<5],rs[N<<5];
void push_up(int x){
tree[x].sum=tree[ls[x]].sum+tree[ls[x]].sum;
tree[x].pre=max(tree[ls[x]].pre,tree[ls[x]].sum+tree[rs[x]].pre);
tree[x].suf=max(tree[rs[x]].suf,tree[rs[x]].suf+tree[ls[x]].suf);
}
void build(int &x,int l,int r){
x=++tot;if(l==r){tree[x]=(node){1,1,1};return;}
int mid=(l+r)/2;
build(ls[x],l,mid);
build(rs[x],mid+1,r);
push_up(x);
}
int update(int x,int l,int r,int v){
int now_x=++tot;
tree[now_x]=tree[x];ls[now_x]=ls[x];rs[now_x]=rs[x];
if(l==r){tree[now_x]=(node){-1,0,0};return now_x;}
int mid=(l+r)/2;
if(v<=mid)ls[now_x]=update(ls[now_x],l,mid,v);
if(v >mid)rs[now_x]=update(rs[now_x],mid+1,r,v);
push_up(now_x);return now_x;
}
int query_sum(int x,int l,int r,int L,int R){
if(L>R)return 0;
if(L<=l && r<=R)return tree[x].sum;
int mid=(l+r)/2,ret=0;
if(L<=mid)ret+=query_sum(ls[x],l,mid,L,R);
if(R> mid)ret+=query_sum(rs[x],mid+1,r,L,R);
return ret;
}
struct pir1{int pre,sum;};
pir1 query_pre(int x,int l,int r,int L,int R){
if(L<=l && r<=R)return (pir1){tree[x].pre,tree[x].sum};
int mid=(l+r)/2;
if(L> mid)return query_pre(rs[x],mid+1,r,L,R);
if(R<=mid)return query_pre(ls[x],l,mid,L,R);
pir1 A=query_pre(ls[x],l,mid,L,R);
pir1 B=query_pre(rs[x],mid+1,r,L,R);
return (pir1){max(A.pre,A.sum+B.pre),A.sum+B.sum};
}
struct pir2{int suf,sum;};
pir2 query_suf(int x,int l,int r,int L,int R){
if(L<=l && r<=R)return (pir2){tree[x].suf,tree[x].sum};
int mid=(l+r)/2;
if(L> mid)return query_suf(rs[x],mid+1,r,L,R);
if(R<=mid)return query_suf(ls[x],l,mid,L,R);
pir2 A=query_suf(ls[x],l,mid,L,R);
pir2 B=query_suf(rs[x],mid+1,r,L,R);
return (pir2){max(B.suf,B.sum+A.suf),A.sum+B.sum};
}
bool check(int x,int A,int B,int C,int D){
int ret=query_suf(vt[x],1,n,A,B-1).suf+query_sum(vt[x],1,n,B,C)+query_pre(vt[x],1,n,C+1,D).pre;
return (ret>=0);
}
signed main(){
n=read();
for(int i=1;i<=n;i++)b[i]=(anth){a[i]=read(),i};
sort(b+1,b+1+n);build(vt[0],1,n);lst=0;
for(int i=1;i<=n;i++){
if(i==1||b[i].x!=b[i-1].x)hsh[b[i].x]=++m,mp[m]=b[i].x;
vt[m]=update(vt[lst],1,n,b[i].id);lst=m;
}
q=read();lst=0;
while(q--){
int p[4];
for(int i=0;i<4;i++)p[i]=(read()+lst)%n+1;
sort(p,p+4);
int A=p[0],B=p[1],C=p[2],D=p[3];
int l=0,r=m,mid;
while(l<=r){
mid=(l+r)/2;
if(check(mid,A,B,C,D))l=mid+1;
else r=mid-1;
}
write(lst=mp[r+1]);putchar('\n');
}
return 0;
}
马蜂出奇的丑勿喷。