#include <bits/stdc++.h>
#define MOD 666013
#define inf (1<<30)+10
using namespace std;
int t,inutil,le,re,poz,val,INF,sol;
char op;
bool ok;
struct Treap
{
int K,P,nr;
bool rev;
Treap *l,*r;
Treap(int K1,int P1,int nr1,bool rev1,Treap *l1,Treap *r1)
{
K=K1;
P=P1;
nr=nr1;
rev=rev1;
l=l1;
r=r1;
}
}*R,*nil,*t1,*t2,*t3,*aux;
void Rev_verif(Treap *&R)
{
if(R->rev==0)return ;
R->rev=0;
Treap *var=R->l;
R->l=R->r;
R->r=var;
R->l->rev^=1;
R->r->rev^=1;
}
void reup(Treap *&R)
{
R->nr=R->l->nr+R->r->nr+1;
}
void rotleft(Treap *&R)
{
Treap *t=R->l;
R->l=t->r;
t->r=R;
reup(R);
reup(t);
R=t;
}
void rotright(Treap *&R)
{
Treap *t=R->r;
R->r=t->l;
t->l=R;
reup(R);
reup(t);
R=t;
}
void balance(Treap *&R)
{
Rev_verif(R);
if(R->l->P>R->P)
{
Rev_verif(R->l);
rotleft(R);
}
else if(R->r->P>R->P)
{
Rev_verif(R->r);
rotright(R);
}
}
void inserare(Treap *&R,int poz,int k, int pr)
{
if(R==nil)
{
R=new Treap(k,pr,1,0,nil,nil);
return ;
}
Rev_verif(R);
if(R->l->nr>=poz)inserare(R->l,poz,k,pr);
else inserare(R->r,poz-R->l->nr-1,k,pr);
reup(R);
balance(R);
}
void acces(Treap *&R,int poz)
{
Rev_verif(R);
if(R->l->nr>=poz)acces(R->l,poz);
else if(R->l->nr+1<poz)acces(R->r,poz-R->l->nr-1);
else
{
sol=R->K;
return ;
}
}
void sterge(Treap *&R,int poz)
{
Rev_verif(R);
if(R->l->nr>=poz)sterge(R->l,poz);
else if(R->l->nr+1<poz)sterge(R->r,poz-R->l->nr-1);
else
{
if(R->l==nil&&R->r==nil)
{
delete R;
R=nil;
}
else
{
if(R->l->P>R->r->P)
{
Rev_verif(R->l);
rotleft(R);
}
else
{
Rev_verif(R->r);
rotright(R);
}
sterge(R,poz);
}
}
if(R!=nil)reup(R);
}
void split(Treap *&R,Treap *&ts,Treap *&td,int poz)
{
inserare(R,poz,0,inf);
ts=R->l;
td=R->r;
delete R;R=nil;
}
void join(Treap *&R,Treap *&ts,Treap *&td)
{
R= new Treap(0,0,ts->nr+td->nr+1,0,ts,td);
sterge(R,ts->nr+1);
}
void scrie(Treap *&R)
{
if(R==nil)return ;
Rev_verif(R);
scrie(R->l);
printf("%d ",R->K);
scrie(R->r);
}
int main()
{
freopen("secv8.in","r",stdin);
freopen("secv8.out","w",stdout);
scanf("%d%d",&t,&inutil);
srand(time(0));
nil=new Treap(0,0,0,0,0,0);
ok=false;
while(t--)
{
scanf("\n%c",&op);
if(op=='I')
{
scanf("%d%d",&poz,&val);
if(!ok)R = new Treap(val,rand()%MOD+1,1,0,nil,nil);
else inserare(R,poz-1,val,rand()%MOD+1);
ok=true;
}
else if(op=='A')
{
scanf("%d",&poz);
acces(R,poz);
printf("%d\n",sol);
}
else if(op=='R')
{
scanf("%d%d",&le,&re);
split(R,aux,t3,re);
split(aux,t1,t2,le-1);
t2->rev^=1;
join(aux,t1,t2);
join(R,aux,t3);
}
else if(op=='D')
{
scanf("%d%d",&le,&re);
split(R,aux,t3,re);
split(aux,t1,t2,le-1);
join(R,t1,t3);
}
}
scrie(R);
return 0;
}