#include<bits/stdc++.h>
using namespace std;
const int N=1e5+20;
const int S=500;
int n;
deque<int>G[S];
int cnt[S][N];
int dis[N];
int b[N];
int sq;
long long ans;
int main()
{
cin>>n;
sq=sqrt(n);
for(int i=1;i<=n;++i)
{
cin>>dis[i];
b[i]=(i-1)/sq+1;
cnt[b[i]][dis[i]]++;
G[b[i]].push_back(dis[i]);
}
// for(int i=1;i<=n;++i)cout<<b[i]<<endl;
int q;
cin>>q;
while(q--)
{
int T;
cin>>T;
int L,R;
if(T==1)
{
int l,r;
cin>>l>>r;
l=((l+ans-1)%n)+1;
r=((r+ans-1)%n)+1;
if(l>r)swap(l,r);
int L,R;
L=l-(b[l]-1)*sq-1;
R=r-(b[r]-1)*sq-1;
if(b[l]==b[r])
{
int t=G[b[l]][R];
for(int i=R;i>L;--i)G[b[l]][i]=G[b[l]][i-1];
G[b[l]][L]=t;
continue;
}
//cout<<l<<" "<<r<<" "<<L<<" "<<R<<endl;
int last=G[b[l]].back();
cnt[b[l]][last]--;
cnt[b[l]][G[b[r]][R]]++;
cnt[b[r]][last]--;
for(int i=b[l]+1;i<b[r];++i)
{
cnt[i][last]++;
G[i].push_front(last);
last=G[i].back();
G[i].pop_back();
cnt[i][last]--;
}
int rev=G[b[r]][R];
for(int i=G[b[l]].size()-1;i>L;--i)G[b[l]][i]=G[b[l]][i-1];
G[b[l]][L]=rev;
//cout<<"!!!!"<<endl;
for(int i=R;i>0;--i)G[b[r]][i]=G[b[r]][i-1];
G[b[r]][0]=last;
cnt[b[r]][last]++;
}
else
{
int l,r,k;
cin>>l>>r>>k;
l=((l+ans-1)%n)+1;
r=((r+ans-1)%n)+1;
if(l>r)swap(l,r);
k=((k+ans-1)%n)+1;
ans=0;
for(int i=b[l]+1;i<b[r];++i)
{
ans+=cnt[i][k];
}
L=l-(b[l]-1)*sq-1;
R=r-(b[r]-1)*sq-1;
if(b[l]!=b[r])
{
for(int i=L;i<G[b[l]].size();++i)ans+=(G[b[l]][i]==k);
for(int i=0;i<=R;++i)ans+=(G[b[r]][i]==k);
}
else
{
for(int i=L;i<=R;++i)ans+=(G[b[l]][i]==k);
}
cout<<ans<<endl;
}
}
}