#include <bits/stdc++.h>
using namespace std;
//#define TESTS
#define FIO
#define x first
#define y second
#define pii pair<int,int>
#define veci vector<int>
#define vecp vector<pii>
#define all(x) x.begin(), x.end()
#define pb(x,y) x.push_back(y)
struct TreapNode{
int val=0, prio=0;
int size=0;
bool reversed=0;
TreapNode *l=NULL, *r=NULL;
TreapNode *get_l()
{
if(!l) l = new TreapNode;
return l;
}
TreapNode *get_r()
{
if(!r) r = new TreapNode;
return r;
}
~TreapNode()
{
delete l;
delete r;
}
};
int getsize(TreapNode *x)
{
return x? (x->size) : 0;
}
void upsize(TreapNode *x)
{
if(x) x->size = 1+getsize(x->l)+getsize(x->r);
}
void flip(TreapNode *x)
{
if(!x) return;
swap(x->l, x->r);
flip(x->l);
flip(x->r);
}
void push_rev(TreapNode *x)
{
if(!x) return;
if(!x->reversed) return;
x->reversed = 0;
swap(x->l, x->r);
if(x->l) x->l->reversed = !(x->l->reversed);
if(x->r) x->r->reversed = !(x->r->reversed);
}
TreapNode *join(TreapNode *l, TreapNode *r)
{
if(l==NULL) return r;
if(r==NULL) return l;
push_rev(l);
push_rev(r);
if(l->prio > r->prio)
{
l->r = join(l->r, r);
upsize(l);
return l;
}
r->l = join(l, r->l);
upsize(r);
return r;
}
void separate(TreapNode *base, int index, TreapNode*& l, TreapNode *& r, int add=0)
{
push_rev(base);
if(base==NULL)
{
//cerr<<"HERE??\n";
l=NULL;
r=NULL;
return;
}
if(getsize(base->l) + add < index)
{
l=base;
separate(base->r, index, base->r, r, add+getsize(base->l)+1);
upsize(l);
return;
}
r=base;
separate(base->l, index, l, base->l, add);
upsize(r);
}
void printNode(TreapNode *x)
{
if(!x) return;
push_rev(x);
printNode(x->l);
cout<<x->val<<' ';
printNode(x->r);
}
struct Treap{
TreapNode *root=NULL;
void insert(int poz, int x)
{
TreapNode *next = new TreapNode;
next->val =x;
next->size = 1;
next->prio=rand();
TreapNode *l,*r;
//cerr<<"here\n";
separate(root, poz-1, l, r);
l=join(l, next);
//cerr<<"here\n";
root=join(l,r);
}
void erase(int st, int dr)
{
TreapNode *l, *mid, *r;
separate(root, dr, l, r);
separate(l, st-1, l, mid);
delete mid;
root=join(l, r);
}
void reverse(int st, int dr)
{
TreapNode *l, *mid, *r;
separate(root, dr, l, r);
separate(l, st-1, l, mid);
mid->reversed= !(mid->reversed);
l=join(l, mid);
root=join(l, r);
}
int get(int poz)
{
TreapNode *current=root;
while(true)
{
push_rev(current);
if(getsize(current->l)>=poz) current=current->l;
else if(getsize(current->l)+1<poz) poz-=getsize(current->l)+1, current=current->r;
else return current->val;
}
}
void printTreap()
{
printNode(root);
cout<<'\n';
}
~Treap()
{
delete root;
}
};
const int maxn = 1e5+5;
int n,rev;
void solve()
{
cin>>n>>rev;
Treap tri;
for(int i=1;i<=n;i++)
{
int x,y; char c;
cin>>c;
switch (c)
{
case 'I':
cin>>x>>y;
tri.insert(x,y);
break;
case 'R':
cin>>x>>y;
tri.reverse(x,y);
break;
case 'A':
cin>>x;
cout<<tri.get(x)<<'\n';
break;
case 'D':
cin>>x>>y;
tri.erase(x,y);
break;
default:
cerr<<"ai citit "<<c<<'\n';
assert(0);
}
//cerr<<"HERE "<<i<<' '<<c<<' '<<x<<','<<y<<'\n';
//tri.printTreap();
}
tri.printTreap();
}
int main()
{
cin.tie(0);
cout.tie(0);
ios::sync_with_stdio(0);
#ifndef LOCAL
#ifdef FIO
#define fname "secv8"
freopen(fname".in", "r", stdin);
freopen(fname".out", "w", stdout);
#endif
#endif
int t=1;
#ifdef TESTS
cin>>t;
#endif
while(t--)
{
solve();
}
return 0;
}