#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <ctime>
#include <algorithm>
using namespace std;
FILE *f=fopen("secv8.in","r");
FILE *g=fopen("secv8.out","w");
int N,M,C;
int myrand()
{
int val=rand()%10000;
return val+(!val);
}
struct treap{
int k;
int p;
bool rev;
int sz;
treap *l,*r;
treap(int key,int prio,treap* f1,treap*f2,int s)
{
rev=0;
k=key;
p=prio;
l=f1;
r=f2;
sz=s;
}
}*nill,*T;
void refrsize(treap* &T)
{
if(T==nill)return;
T->sz=T->l->sz+1+T->r->sz;
}
void refrrev(treap* &T)
{
if(T==nill)return ;
if(!T->rev)return ;
T->rev=0;
swap(T->l,T->r);
T->l->rev^=1;
T->r->rev^=1;
}
void rotst(treap* &T)
{
treap* tmp=T->l;
T->l=tmp->r;
tmp->r=T;
T=tmp;
refrsize(T);
refrsize(T->r);
}
void rotdr(treap* &T)
{
treap* tmp=T->r;
T->r=tmp->l;
tmp->l=T;
T=tmp;
refrsize(T);
refrsize(T->l);
}
void balance(treap* &T)
{
refrrev(T);
refrsize(T);
refrsize(T->l);
refrsize(T->r);
if(T->l->p>T->p)rotst(T);
if(T->r->p>T->p)rotdr(T);
}
treap* join(treap* &T1,treap* &T2)
{
refrrev(T1);
refrrev(T2);
if(T1==nill)return T2;
if(T2==nill)return T1;
if(T1->p>T2->p){T1->r=join(T1->r,T2);refrsize(T1);return T1;}
else {T2->l=join(T1,T2->l);refrsize(T2);return T2;}
}
pair<treap*,treap*> split(treap* &T,int val)///[1,pos]
{
refrrev(T);
if(T==nill)return {nill,nill};
pair<treap*,treap*> ans;
if(val<=T->l->sz)
{
ans.second=T;
pair<treap*,treap*> aux=split(T->l,val);
ans.second->l=aux.second;
ans.first=aux.first;
}
else
{
ans.first=T;
pair<treap*,treap*> aux=split(T->r,val-T->l->sz-1);
ans.first->r=aux.first;
ans.second=aux.second;
}
refrsize(ans.first);
refrsize(ans.second);
return ans;
}
void ins(treap* &T,int key,int prio,int pos)
{
pair<treap*,treap*> tmp;
tmp=split(T,pos-1);
treap* aux=new treap(key,prio,nill,nill,1);
treap* t=join(tmp.first,aux);
T=join(t,tmp.second);
}
void M1(int i,int j,int k)
{
pair<treap*,treap*> tmp,aux;
tmp=split(T,j);
aux=split(tmp.first,i-1);
treap* t;t=join(aux.first,tmp.second);
tmp=split(t,k);
t=join(tmp.first,aux.second);
T=join(t,tmp.second);
}
void M2(int i,int j)
{
pair<treap*,treap*> tmp,aux;
tmp=split(T,j);
aux=split(tmp.first,i-1);
aux.second->rev^=1;
treap* t=join(aux.first,aux.second);
T=join(t,tmp.second);
}
void M3(int i,int j)
{
pair<treap*,treap*> tmp,aux;
tmp=split(T,j);
aux=split(tmp.first,i-1);
T=join(aux.first,tmp.second);
}
int fi(treap* &T,int pos)
{
refrrev(T);
if(pos==T->l->sz+1)return T->k;
if(pos<=T->l->sz)return fi(T->l,pos);
return fi(T->r,pos-T->l->sz-1);
}
void afis(treap* T)
{
refrrev(T);
if(T==nill)return ;
afis(T->l);
fprintf(g,"%d ",T->k);
afis(T->r);
}
int main()
{
srand(time(NULL));
T=nill=new treap(0,0,NULL,NULL,0);
fscanf(f,"%d %d\n",&N,&M);
for(int i=1;i<=N;i++)
{
int x,y;
fscanf(f,"%c",&C);
if(C=='I')
{
fscanf(f,"%d %d\n",&x,&y);
ins(T,y,myrand(),x);
}
else if(C=='A')
{
fscanf(f,"%d\n",&x);
fprintf(g,"%d\n",fi(T,x));
}
else if(C=='R')
{
fscanf(f,"%d %d\n",&x,&y);
M2(x,y);
}
else if(C=='D')
{
fscanf(f,"%d %d\n",&x,&y);
M3(x,y);
}
}
afis(T);
fclose(f);
fclose(g);
return 0;
}