#include <fstream>
#include <time.h>
#include <stdlib.h>
using namespace std;
ifstream fin("secv8.in");
ofstream fout("secv8.out");
struct node{
int val=0;
int sz=0;
int pr=0;
int rev=0;
node* l = NULL;
node* r = NULL;
node()=default;
node(int x){val = x,sz=1,pr=rand();}
};
void upd(node* r)
{
if(r->rev)
{
r->rev = 0;
if(r->l)
r->l->rev = 1-r->l->rev;
if(r->r)
r->r->rev = 1-r->r->rev;
swap(r->l,r->r);
}
}
int sz(node* r)
{
return (r==NULL) ? 0 : r->sz;
}
void split(node* root,int pos,node*& l,node*& r)
{
if(root==NULL)
{
l=r=NULL;return;
}
upd(root);
if(sz(root->l) < pos) split(root->r,pos-sz(root->l)-1,root->r,r),l=root;
else split(root->l,pos,l,root->l),r=root;
root->sz = 1 + sz(root->l) + sz(root->r);
}
void merge(node*& root,node* l,node* r)
{
if(l==NULL){root = r; return;}
if(r==NULL){root = l; return;}
upd(l);
upd(r);
if(l->pr < r->pr)
{
merge(l->r,l->r,r);
root = l;
}
else
{
merge(r->l,l,r->l);
root = r;
}
root->sz = 1 + sz(root->l) + sz(root->r);
}
void print(node* nod)
{
if(nod==NULL)
return;
upd(nod);
print(nod->l);
fout<<nod->val<<' ';
print(nod->r);
}
void reverse(int st,int dr,node*& nod)
{
node* d,*b;
split(nod,dr,nod,b);
split(nod,st-1,nod,d);
d->rev = 1;
merge(nod,nod,d);
merge(nod,nod,b);
}
void insert(int pos,int val,node*& nod)
{
node* a;
split(nod,pos-1,nod,a);
merge(nod,nod,new node(val));
merge(nod,nod,a);
}
int get(int pos,node*& nod)
{
node *a,*b;
split(nod,pos-1,nod,a);
split(a,1,a,b);
int x = a->val;
merge(a,a,b);
merge(nod,nod,a);
return x;
}
void del(int st,int dr,node*& nod)
{
node *a,*b;
split(nod,st-1,a,nod);
split(nod,dr-st+1,b,nod);
merge(nod,a,nod);
}
int main()
{
int n,p;
node* r = NULL;
fin>>n>>p;
for(int i=1;i<=n;i++)
{
char op;
fin>>op;
if(op=='I')
{
int k,e;
fin>>k>>e;
insert(k,e,r);
}
else if(op=='A')
{
int k;
fin>>k;
fout<<get(k,r)<<'\n';
}
else if(op=='R')
{
int st,dr;
fin>>st>>dr;
reverse(st,dr,r);
}
else if(op=='D')
{
int st,dr;
fin>>st>>dr;
del(st,dr,r);
}
}
print(r);
}