RT
// LUOGU_RID: 125254708
#include<bits/stdc++.h>
using namespace std;
int n,q,m;
int a[100001];
int bel[100001];
int st[317],ed[317];
deque<int> ge[317];
int cnt[317][100001];
int last;
void modify(int l,int r){
if(bel[l]==bel[r]){
int tmp=ge[bel[l]][r-st[bel[l]]];
for(int i=r;i>l;i--)
ge[bel[l]][i-st[bel[l]]]=ge[bel[l]][i-1-st[bel[l]]];
ge[bel[l]][l-st[bel[l]]]=tmp;
}
else{
for(int i=bel[l]+1;i<=bel[r];i++){
int tmp=ge[i-1].back();
ge[i].push_front(tmp);
cnt[i][tmp]++;
ge[i-1].pop_back();
cnt[i-1][tmp]++;
}
ge[bel[l]].insert(ge[bel[l]].begin()+(l-st[bel[l]]),ge[bel[r]][r-st[bel[r]]+1]);
++cnt[bel[l]][ge[bel[r]][r-st[bel[r]+1]]];
--cnt[bel[r]][ge[bel[r]][r-st[bel[r]+1]]];
ge[bel[r]].erase(ge[bel[r]].begin()+(r-st[bel[r]+1]));
}
}
void ask(int l,int r,int k){
int ans=0;
if(bel[l]==bel[r]){
for(int i=l;i<=r;i++)
if(ge[bel[l]][i-st[bel[l]]]==k)
ans++;
}
else{
for(int i=l;i<=ed[bel[l]];i++)
if(ge[bel[l]][i-st[bel[l]]]==k)
ans++;
for(int i=st[bel[r]];i<=r;i++)
if(ge[bel[r]][i-st[bel[r]]]==k)
ans++;
for(int i=bel[l]+1;i<bel[r];i++)
ans+=cnt[i][k];
}
cout<<ans<<'\n';
last=ans;
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>n;q=sqrt(n);
for(int i=1;i<=n;i++)
cin>>a[i];
for(int i=1;i<=q;i++)
st[i]=n/q*(i-1)+1,ed[i]=n/q*i;ed[q]=n;
for(int i=1;i<=q;i++)
for(int j=st[i];j<=ed[i];j++)
ge[i].push_back(a[j]),
bel[j]=i,
cnt[i][a[j]]++;
cin>>m;
for(int i=1;i<=m;i++){
int id,l,r;
cin>>id>>l>>r;
l=(l+last-1)%n+1;
r=(r+last-1)%n+1;
if(l>r) swap(l,r);
if(id==1){
modify(l,r);
}
else{
int k;
cin>>k;
k=(k+last-1)%n+1;
ask(l,r,k);
}
}
return 0;
}