rt
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,q;
mt19937 rnd(chrono::system_clock::now().time_since_epoch().count());
struct node{int ls,rs,key,pri,lazy1,lazy2,size,min;}t[500005];
int cnt,root;
inline int newNode(int x){
++cnt,t[cnt].key=t[cnt].min=x;
t[cnt].pri=rnd();
t[cnt].size=1;
return cnt;
}
inline void Update(int u){t[u].size=t[t[u].ls].size+t[t[u].rs].size+1;t[u].min=min({t[t[u].ls].min,t[t[u].rs].min,t[u].key});}
inline void change1(int u,int x){t[u].key+=x,t[u].lazy1+=x;}
inline void change2(int u){t[u].lazy2^=1,swap(t[u].ls,t[u].rs);}
inline void push_down(int u){
if(t[u].lazy1)change1(t[u].ls,t[u].lazy1),change1(t[u].rs,t[u].lazy1),t[u].lazy1=0;
if(t[u].lazy2)change2(t[u].ls),change2(t[u].rs),t[u].lazy2=0;
}
inline void Split(int u,int k,int &L,int &R){
if(u==0){L=R=0;return ;}
push_down(u);
if(k<=t[t[u].ls].size){
R=u;
Split(t[u].ls,k,L,t[u].ls);
}
else {
L=u;
Split(t[u].rs,k-t[t[u].ls].size-1,t[u].rs,R);
}
Update(u);
}
inline int Merge(int L,int R){
if(!L||!R)return L+R;
if(t[L].pri>t[R].pri){
push_down(L);
t[L].rs=Merge(t[L].rs,R);
Update(L);
return L;
}
else {
push_down(R);
t[R].ls=Merge(L,t[R].ls);
Update(R);
return R;
}
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>n;
for(int i=1;i<=n;i++){
int x;cin>>x;
root=Merge(root,newNode(x));
}
cin>>m;
while(m--){
t[0].min=INT_MAX;
string s;int x,y,z,L,R,p,pl,pr;
cin>>s>>x;
if(s[0]=='A'){
cin>>y>>z;
Split(root,y,L,R);
Split(L,x-1,L,p);
change1(p,z);
root=Merge(Merge(L,p),R);
}
if(s=="REVERSE"){
cin>>y;
Split(root,y,L,R);
Split(L,x-1,L,p);
change2(p);
root=Merge(Merge(L,p),R);
}
if(s=="REVOLVE"){
cin>>y>>z;z%=(y-x+1);
Split(root,y,L,R);
Split(L,x-1,L,p);
Split(p,y-x+1-z,pl,pr);
root=Merge(Merge(L,Merge(pr,pl)),R);
}
if(s[0]=='I'){
cin>>y;
Split(root,x,L,R);
root=Merge(Merge(L,newNode(y)),R);
}
if(s[0]=='D'){
Split(root,x+1,L,R);
Split(L,x,L,p);
root=Merge(L,R);
}
if(s[0]=='M'){
cin>>y;
Split(root,y,L,R);
Split(L,x-1,L,p);
cout<<t[p].min<<'\n';
root=Merge(Merge(L,p),R);
}
}
return 0;
}