#include <bits/stdc++.h>
using namespace std;
ifstream fin("secv8.in");
ofstream fout("secv8.out");
mt19937 rng(chrono::steady_clock().now().time_since_epoch().count());
//mt19937 rng(1348729);
int AlinM_APusSaFacAsta,DeCeDoamneImiDaiTreap;
struct node
{
node *l,*r;
int subtreesize;
int val;
int pri;
int toprop;
node()
{
l=NULL;
r=NULL;
subtreesize=1;
pri=rng();
toprop=0;
}
};
node *t;
int size(node* v)
{
if(v==NULL)
return 0;
return v->subtreesize;
}
void prop(node* me)
{
if(me==NULL)
return;
if(me->toprop%2==1)
{
me->toprop=0;
swap(me->l,me->r);
if(me->l!=NULL)
me->l->toprop++;
if(me->r!=NULL)
me->r->toprop++;
}
me->toprop=0;
}
void recalc(node* me)
{
if(me==NULL)
return;
prop(me);
me->subtreesize=1+size(me->l)+size(me->r);
}
node* merge(node* a, node* b)
{
if(a==NULL)
return b;
if(b==NULL)
return a;
prop(a);
prop(b);
if(a->pri>b->pri)
{
node* rgt=merge(a->r,b);
recalc(rgt);
a->r=rgt;
recalc(a);
return a;
}
else
{
node* lft=merge(a,b->l);
recalc(lft);
b->l=lft;
recalc(b);
return b;
}
}
array<node*,2> split(node* me, int poz)
{
if(me==NULL)
return {NULL,NULL};
prop(me);
if(poz==0)
return {NULL,me};
if(poz==size(me))
return {me,NULL};
if(poz<=size(me->l))
{
array<node*,2> b=split(me->l,poz);
node* lft=b[0];
node* rgt=me;
rgt->l=b[1];
recalc(lft);
recalc(rgt);
return {lft,rgt};
}
else
{
array<node*,2> b=split(me->r,poz-size(me->l)-1);
node* rgt=b[1];
node* lft=me;
lft->r=b[0];
recalc(lft);
recalc(rgt);
return {lft,rgt};
}
}
void putin(int poz,int val)
{
array<node*,2> b=split(t,poz-1);
node* me = new node;
me->val=val;
t=merge(b[0],me);
t=merge(t,b[1]);
}
int getval(int poz)
{
array<node*,2> b=split(t,poz-1);
node* u=b[0],*w=b[1];
array<node*,2> c=split(b[1],1);
int rez=c[0]->val;
t=merge(b[0],c[0]);
t=merge(t,c[1]);
return rez;
}
void CelMaiReverse(int l,int r)
{
array<node*,2> b=split(t,l-1);
array<node*,2> c=split(b[1],r-l+1);
swap(c[0]->l,c[0]->r);
if(c[0]->l!=NULL)
c[0]->l->toprop++;
if(c[0]->r!=NULL)
c[0]->r->toprop++;
t=merge(b[0],c[0]);
t=merge(t,c[1]);
}
void ScoatelDalIncolo(int l,int r)
{
array<node*,2> b=split(t,l-1);
array<node*,2> c=split(b[1],r-l+1);
t=merge(b[0],c[1]);
}
int main()
{
fin>>DeCeDoamneImiDaiTreap>>AlinM_APusSaFacAsta;
int cnt=0;
while(DeCeDoamneImiDaiTreap--)
{
char c;
fin>>c;
cnt++;
if(c=='I')
{
int poz,val;
fin>>poz>>val;
putin(poz,val);
}
if(c=='A')
{
int poz;
fin>>poz;
fout<<getval(poz)<<'\n';
}
if(c=='R')
{
int st,dr;
fin>>st>>dr;
CelMaiReverse(st,dr);
}
if(c=='D')
{
int st,dr;
fin>>st>>dr;
ScoatelDalIncolo(st,dr);
}
}
int n=size(t);
for(int i=1;i<=n;i++)
fout<<getval(i)<<' ';
return 0;
}