#include <bits/stdc++.h>
using namespace std;
ifstream f("secv8.in");
ofstream g("secv8.out");
struct nod
{
nod *st,*dr;
int val,sz, prior;
bool rev;
};
nod nil;
nod *rad = &nil;
nod *propag(nod *n)
{
if(n==&nil)
{
return n;
}
if(n->rev==true)
{
swap(n->st,n->dr);
n->rev=false;
n->st->rev^=1;
n->dr->rev^=1;
}
return n;
}
nod *mod_fiu(nod *n, int care, nod *f)
{
if(care==0)
{
n->st=f;
}
else
{
n->dr=f;
}
n->sz=n->st->sz + 1 + n->dr->sz;
return n;
}
pair<nod*,nod*> split(nod *n, int k)
{
n = propag(n);
if(n==&nil)
{
return {&nil,&nil};
}
if(n->st->sz>=k)
{
auto t = split(n->st,k);
return {t.first,mod_fiu(n,0,t.second)};
}
else
{
auto t = split(n->dr,k - n->st->sz - 1);
return {mod_fiu(n,1,t.first),t.second};
}
}
nod *join(nod *st, nod *dr)
{
st = propag(st);
dr = propag(dr);
if(st==&nil)
{
return dr;
}
if(dr==&nil)
{
return st;
}
if(st->prior>=dr->prior)
{
return mod_fiu(st,1,join(st->dr,dr));
}
return mod_fiu(dr,0,join(st,dr->st));
}
nod *Delete(int st, int dr)
{
auto n2 = split(rad,dr+1);
auto n = split(n2.first,st);
return join(n.first,n2.second);
}
nod *Access(nod *n, int k)
{
n = propag(n);
if(n==&nil || n->st->sz == k-1)
{
return n;
}
if(n->st->sz<k)
{
return Access(n->st,k);
}
return Access(n->dr,k);
}
nod *Insert(int poz, int val)
{
auto p = split(rad,poz);
return join(join(p.first,new nod{&nil,&nil,val,1,rand(),false}),p.second);
}
nod *Reverse(int st, int dr)
{
auto n2 = split(rad,dr+1);
auto n = split(n2.first,st);
n.second->rev^=1;
n.second = propag(n.second);
return join(join(n.first,n.second),n2.second);
}
int n,rrr;
int main()
{
srand(time(NULL));
f>>n>>rrr;
for(int i=1;i<=n;i++)
{
char ch;
f>>ch;
if(ch=='I')
{
int poz,val;
f>>poz>>val;
--poz;
rad = Insert(poz,val);
}
else if(ch=='A')
{
int poz;
f>>poz;
--poz;
g<<(Access(rad,poz)->val)<<'\n';
}
else if(ch=='R')
{
int st,dr;
f>>st>>dr;
--st;
--dr;
rad = Reverse(st,dr);
}
else if(ch=='D')
{
int st, dr;
f>>st>>dr;
--st;
--dr;
rad = Delete(st,dr);
}
}
for(int i=1;i<=rad->sz;i++)
{
g<<(Access(rad,i-1)->val)<<' ';
}
g<<'\n';
return 0;
}