#include <iostream>
#include <fstream>
#include <cstdlib>
#include <ctime>
using namespace std;
ifstream F("secv8.in");
ofstream G("secv8.out");
struct item {
int pr,sz,vl;
bool rev;
item *l,*r;
item()
{
}
item(int vv)
{
vl = vv;
pr = (rand() << 6) ^ rand();
sz = 1;
l = r = NULL;
rev = 0;
}
};
#define tree item*
void upd(tree &t)
{
if ( !t ) return;
t->sz = 1 + ( t->l ? t->l->sz : 0 ) + ( t->r ? t->r->sz : 0 );
}
void check(tree &t)
{
if ( !t ) return;
if ( t->rev )
{
t->rev ^= 1;
swap(t->l,t->r);
if ( t->l ) t->l->rev ^= 1;
if ( t->r ) t->r->rev ^= 1;
}
}
void split(tree t,int pl,tree &l,tree &r)
{
if ( !t )
return void(l = r = NULL);
check(t);
int sz = t->l ? t->l->sz : 0;
if ( pl <= sz )
split(t->l,pl,l,t->l) , r = t;
else
split(t->r,pl-sz-1,t->r,r) , l = t;
upd(l);
upd(r);
}
void insert(tree &t,int pl,tree x)
{
if ( !t )
return void(t = x);
check(t);
int sz = t->l ? t->l->sz : 0;
if ( t->pr > x->pr ) // min pri
split(t,pl,x->l,x->r) , t = x;
else
{
if ( pl <= sz )
insert(t->l,pl,x);
else
insert(t->r,pl-sz-1,x);
}
upd(t);
}
void merge(tree &t,tree l,tree r)
{
check(l);
check(r);
if ( !l || !r )
return void( t = l ? l : r ); //
if ( l->pr < r->pr )
merge(l->r,l->r,r) , t = l;
else
merge(r->l,l,r->l) , t = r;
upd(t);
}
void erase(tree &t,int pl)
{
check(t);
int sz = t->l ? t->l->sz : 0;
if ( sz + 1 == pl )
merge(t,t->l,t->r);
else
if ( pl <= sz )
erase(t->l,pl);
else
erase(t->r,pl-sz-1);
upd(t);
}
int acces(tree t,int pl)
{
check(t);
int sz = t->l ? t->l->sz : 0;
if ( sz + 1 == pl )
return t->vl;
else
if ( pl <= sz )
return acces(t->l,pl);
else
return acces(t->r,pl-sz-1);
}
void print(tree t)
{
check(t);
if ( t->l ) print(t->l);
G<<t->vl<<' ';
if ( t->r ) print(t->r);
}
void printd(tree t)
{
check(t);
if ( t->l ) printd(t->l);
cerr<<t->vl<<' ';
if ( t->r ) printd(t->r);
}
int n,m;
char ch;
tree t = NULL;
int main()
{
srand(time(0));
F>>n>>m;
for (int i=1,p,vl,p1,p2;i<=n;++i)
{
F>>ch;
if ( ch == 'I' )
{
F>>p>>vl;
tree x = new item(vl);
insert(t,p-1,x);
}
if ( ch == 'A' )
{
F>>p;
G<<acces(t,p)<<'\n'; // -1
}
if ( ch == 'R' )
{
F>>p1>>p2;
tree l = new item();
tree m = new item();
tree r = new item();
split(t,p1-1,l,m);
split(m,p2,m,r);
// printd(m); cerr<<'\n';
m->rev = 1;
merge(t,l,m);
// printd(t); cerr<<'\n';
merge(m,t,r);
t = m;
// printd(t); cerr<<'\n';
}
if ( ch == 'D' )
{
F>>p1>>p2;
for (;p2 >= p1;p2--)
erase(t,p1);
}
//printd(t); cerr<<'\n';
}
print(t); G<<'\n';
}