const int N=2e4+5;
int n,m,_;
int i,j,k;
int a[N];
struct Node
{
int l,r;
int sum,lsum,rsum;
void update(int x)
{
sum = lsum = rsum = x ;
}
Node (int l=0,int r=0,int sum=0,int lsum=-inf,int rsum=-inf)
:l(l),r(r),sum(sum),lsum(lsum),rsum(rsum){}
}t[N<<5];
int root[N],tot=0;
int rnk[N];
void push_up(int x)
{
int lson=t[x].l,rson=t[x].r;
t[x].sum=t[lson].sum+t[rson].sum;
t[x].lsum=max(t[lson].lsum,t[lson].sum+t[rson].lsum);
t[x].rsum=max(t[rson].rsum,t[rson].sum+t[lson].rsum);
}
void build(int l,int r,int &x)
{
x=++tot;
if(l==r) t[x].update(1);
else{
int mid=l+r>>1;
build(l,mid,t[x].l);
build(mid+1,r,t[x].r);
push_up(x);
}
}
void update(int &x,int y,int l,int r,int pos)
{
x=++tot;
t[x]=t[y];
if(l==r) t[x].update(-1);
else{
int mid=l+r>>1;
if(mid>=pos) update(t[x].l,t[y].l,l,mid,pos);
else update(t[x].r,t[y].r,mid+1,r,pos);
push_up(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 t[x].sum;
}else{
int mid=L+R>>1;
int ans=0;
if(mid>=l) ans+=query_sum(t[x].l,L,mid,l,r);
if(r>=mid+1) ans+=query_sum(t[x].r,mid+1,R,l,r);
return ans;
}
}
Node operator+(Node a,Node b)
{
Node ans;
ans.sum=a.sum+b.sum;
ans.lsum=max(a.lsum,a.sum+b.lsum);
ans.rsum=max(b.rsum,a.rsum+b.sum);
return ans;
}
Node query_max(int x,int L,int R,int l,int r)
{
if(L>=l && r>=R) return Node(0,0,t[x].sum,t[x].lsum,t[x].rsum);
else{
int mid=L+R>>1;
if(mid>=r) return query_max(t[x].l,L,mid,l,r);
else if(l>=mid+1) return query_max(t[x].r,mid+1,R,l,r);
else return query_max(t[x].l,L,mid,l,r)+query_max(t[x].r,mid+1,R,l,r);
}
}
bool C(int a,int b,int c,int d,int x)
{
int ans=query_sum(root[x],1,n,b+1,c-1);
//if(b+1<=c-1) ans=query(root[x],1,n,b+1,c-1,0);
ans+=query_max(root[x],1,n,a,b).rsum;
ans+=query_max(root[x],1,n,c,d).lsum;
return ans>=0;
}
bool cmp(int x,int y)
{
return a[x]<a[y];
}
int main()
{
while(~sd(n)){
for(int i=1;i<=n;i++) sd(a[i]),rnk[i]=i;
sort(rnk+1,rnk+1+n,cmp);
//排名为 i 的是第 rnk[i] 个数字
//也可以理解为排名为 i 的数字的位置在 rnk[i] 处
//for(int i=1;i<=n;i++) dbg(rnk[i]);
build(1,n,root[1]);
//dbg(t[root[1]].sum);
for(int i=2;i<=n;i++) update(root[i],root[i-1],1,n,rnk[i-1]);
//dbg(query(root[5],1,n,1,4,0));
sd(m);
int last=0;
for(int i=1;i<=m;i++){
int x,y,nx,ny,id[4];
for(int j=0;j<4;j++) sd(id[j]),id[j]=(id[j]+last)%n+1;
sort(id,id+4);
x=id[0],y=id[1],nx=id[2],ny=id[3];
//forn(j,0,3) dbg(id[j]);
int l=1,r=n,ans=1;
while(r>=l){
int mid=l+r>>1;
if(C(x,y,nx,ny,mid)) ans=mid,l=mid+1;
else r=mid-1;
}
last=a[rnk[ans]];
pd(last);
}
}
//PAUSE;
return 0;
}