#include <bits/stdc++.h>
#define INF 2140000000
#define MOD 1000000007
#define MaxN 100005
using namespace std;
FILE *IN=fopen("secv8.in","r"),*OUT=fopen("secv8.out","w");
int N,junk,X,Y;
char type;
struct Node
{
int val,pri,rev,w;
Node *left,*right;
Node(Node *T=NULL,int v=0)
{
rev=0;
w=(T!=NULL);
left=right=T;
val=v;
pri=rand();
}
}*Root,*NIL;
typedef Node *Treap;
typedef pair<Treap,Treap> Pair;
void Reverse(Treap &T)
{
if(T->rev)
{
T->rev=0;
swap(T->left,T->right);
T->left->rev^=1;
T->right->rev^=1;
}
}
void Recalculate(Treap &T)
{
T->w=1+T->left->w+T->right->w;
}
Treap join(Treap T1,Treap T2)
{
if(T1==NIL)
return T2;
if(T2==NIL)
return T1;
Reverse(T1);
Reverse(T2);
if(T1->pri>T2->pri)
{
T1->right=join(T1->right,T2);
Recalculate(T1);
return T1;
}
else
{
T2->left=join(T1,T2->left);
Recalculate(T2);
return T2;
}
}
Pair split(Treap T,int g)
{
if(T==NIL)
return {NIL,NIL};
Reverse(T);
if(T->left->w+1==g)
{
Pair Temp={T->left,T};
T->left=NIL;
Recalculate(T);
return Temp;
}
else if(T->left->w>=g)
{
Pair Temp=split(T->left,g);
T->left=Temp.second;
Recalculate(T);
return {Temp.first,T};
}
else
{
Pair Temp=split(T->right,g-1-T->left->w);
T->right=Temp.first;
Recalculate(T);
return {T,Temp.second};
}
}
void Insert(Treap &T,int val,int key)
{
Treap Add=new Node(NIL,val);
Pair Temp=split(T,key);
T=join(Temp.first,join(Add,Temp.second));
}
void Delete(Treap &T,int key1,int key2)
{
Pair Temp=split(T,key1);
Pair Temp2=split(Temp.second,key2-key1+2);
T=join(Temp.first,Temp2.second);
}
int Access(Treap T,int key)
{
Reverse(T);
if(T->left->w>=key)
return Access(T->left,key);
else if(T->left->w+1==key)
return T->val;
else return Access(T->right,key-1-T->left->w);
}
void Reverse(Treap &T,int key1,int key2)
{
Pair Temp=split(T,key1);
Pair Temp2=split(Temp.second,key2-key1+2);
Temp2.first->rev^=1;
T=join(Temp.first,join(Temp2.first,Temp2.second));
}
void Print(Treap T)
{
if(T==NIL)
return;
Reverse(T);
Print(T->left);
fprintf(OUT,"%d ",T->val);
Print(T->right);
}
int main()
{
srand(time(NULL));
NIL=new Node();
Root=NIL;
fscanf(IN,"%d%d",&N,&junk);
for(int i=1;i<=N;i++)
{
fprintf(OUT,"\n");
fscanf(IN," %c",&type);
if(type=='I')
{
fscanf(IN,"%d%d",&X,&Y);
Insert(Root,Y,X);
}
else if(type=='A')
{
fscanf(IN,"%d",&X);
fprintf(OUT,"%d\n",Access(Root,X));
}
else if(type=='R')
{
fscanf(IN,"%d%d",&X,&Y);
Reverse(Root,X,Y);
}
else
{
fscanf(IN,"%d%d",&X,&Y);
Delete(Root,X,Y);
}
}
Print(Root);
return 0;
}