#include<bits/stdc++.h>
using namespace std;
int a[100005];
int l[100005],r[100005];
int bl[100005];
deque<int> p[320];
int h[320][100005];
int n,b,cnt;
void init()
{
int i,j;
b=sqrt(n);
for(i=1;i<=n;i+=b)
l[++cnt]=i,r[cnt]=min(n,i+b-1);
for(i=1;i<=cnt;i++)
{
for(j=l[i];j<=r[i];j++)
{
bl[j]=i;
p[i].push_back(a[j]);
h[i][a[j]]++;
}
}
}
int _(int w)
{
return p[bl[w]][w-l[bl[w]]];
}
void insert(int w,int u)
{
h[bl[w]][u]++;
p[bl[w]].insert(p[bl[w]].begin()+w-l[bl[w]],u);
}
void erase(int w)
{
h[bl[w]][_(w)]--;
p[bl[w]].erase(p[bl[w]].begin()+w-l[bl[w]]);
}
void add(int l,int r)
{
int s,i,fl=bl[l],fr=bl[r];
if(fl==fr)
{
s=_(r);
erase(r);
insert(l,s);
return;
}
s=_(r);
erase(r);
for(i=fr-1;i>=fl;i--)
{
h[i+1][p[i].back()]++;
h[i][p[i].back()]--;
p[i+1].push_front(p[i].back());
p[i].pop_back();
}
insert(l,s);
}
int ask(int pl,int pr,int k)
{
int s=0,i,fl=bl[pl],fr=bl[pr];
if(fl==fr)
{
for(i=pl;i<=pr;i++)
s+=_(i)==k;
return s;
}
for(i=fl+1;i<fr;i++)
s+=h[i][k];
return s+ask(pl,r[fl],k)+ask(l[fr],pr,k);
}
int main()
{
int m,i,opt,l,r,k,last=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
init();
scanf("%d",&m);
while(m--)
{
scanf("%d%d%d",&opt,&l,&r);
l=(l+last-1)%n+1,r=(r+last-1)%n+1;
if(l>r) swap(l,r);
if(opt==1) add(l,r);
else scanf("%d",&k),k=(k+last-1)%n+1,printf("%d\n",last=ask(l,r,k));
}
}