#include <bits/stdc++.h>
using namespace std;
ifstream in("secv8.in");
ofstream out("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);
auto n = split(n2.first,st-1);
return join(n.first,n2.second);
}
nod *Access(int k)
{
auto n2 = split(rad,k);
auto n = split(n2.first,k-1);
out<<n.second->val;
return join(join(n.first,n.second),n2.second);
}
nod *Insert(int poz, int val)
{
auto p = split(rad,poz-1);
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);
auto n = split(n2.first,st-1);
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));
in>>n>>rrr;
for(int i=1; i<=n; i++)
{
char c;
in>>c;
if(c=='I')
{
int poz,val;
in>>poz>>val;
rad = Insert(poz,val);
}
else if(c=='A')
{
int poz;
in>>poz;
rad = Access(poz);
out<<'\n';
}
else if(c=='R')
{
int st,dr;
in>>st>>dr;
rad = Reverse(st,dr);
}
else if(c=='D')
{
int st, dr;
in>>st>>dr;
rad = Delete(st,dr);
}
}
for(int i=1; i<=rad->sz; i++)
{
rad = Access(i);
out<<' ';
}
out<<'\n';
return 0;
}