//I <3 treaps
//jk
#include<fstream>
#include<time.h>
#include<stdlib.h>
using namespace std;
ifstream fi("secv8.in");
ofstream fo("secv8.out");
class node
{
public:
node *st,*dr;
int val,pri,sz;
bool rev;
node(node *x, node *y, int a, int b)
{
st=x;
dr=y;
val=a;
pri=b;
sz=1;
rev=0;
}
};
node *rad;
void compute(node *&nod)
{
if(nod->rev)
swap(nod->st,nod->dr);
nod->sz=1;
if(nod->st!=NULL)
{
nod->st->rev^=nod->rev;
nod->sz+=nod->st->sz;
}
if(nod->dr!=NULL)
{
nod->dr->rev^=nod->rev;
nod->sz+=nod->dr->sz;
}
nod->rev=0;
}
void toRight(node *&nod)
{
node *aux=nod->st;
compute(nod);
compute(aux);
nod->st=aux->dr;
aux->dr=nod;
compute(nod);
compute(aux);
nod=aux;
}
void toLeft(node *&nod)
{
node *aux=nod->dr;
compute(nod);
compute(aux);
nod->dr=aux->st;
aux->st=nod;
compute(nod);
compute(aux);
nod=aux;
}
void balance(node *&nod)
{
if(nod->st!=NULL && (nod->st->pri)>(nod->pri))
toRight(nod);
if(nod->dr!=NULL && (nod->dr->pri)>(nod->pri))
toLeft(nod);
}
void ins(node *&nod, int poz, int val, int pri)
{
if(nod==NULL)
{
nod=new node(NULL,NULL,val,pri);
return;
}
compute(nod);
if(poz<=((nod->st!=NULL)?(nod->st->sz):0))
ins(nod->st,poz,val,pri);
else
ins(nod->dr,poz-((nod->st!=NULL)?(nod->st->sz):0)-1,val,pri);
compute(nod);
balance(nod);
}
int del(node *&nod)
{
compute(nod);
if(nod->st==NULL && nod->dr==NULL)
{
delete(nod);
return 2;
}
if(nod->dr==NULL || (nod->st!=NULL && (nod->st->pri)>(nod->dr->pri)))
{
toRight(nod);
int aux=del(nod->dr);
if(aux==2)
nod->dr=NULL;
compute(nod);
return (aux!=0);
}
else
{
toLeft(nod);
int aux=del(nod->st);
if(aux==2)
nod->st=NULL;
compute(nod);
return (aux!=0);
}
}
int src(node *nod, int poz)
{
compute(nod);
if(poz<((nod->st!=NULL)?(nod->st->sz):0))
return src(nod->st,poz);
else if(poz==((nod->st!=NULL)?(nod->st->sz):0))
return nod->val;
else
return src(nod->dr,poz-((nod->st!=NULL)?(nod->st->sz):0)-1);
}
void rev(int x, int y)
{
compute(rad);
ins(rad,x-1,0,1000000000);
node *Ts=rad->st;
ins(rad->dr,y-x+1,0,1000000000);
node *T=rad->dr->st;
node *Td=rad->dr->dr;
T->rev^=1;
delete(rad->dr);
delete(rad);
rad=new node(Ts,T,0,1000000000);
del(rad);
rad=new node(rad,Td,0,1000000000);
del(rad);
}
void ers(int x, int y)
{
ins(rad,x-1,0,1000000000);
node *Ts=rad->st;
ins(rad->dr,y-x+1,0,1000000000);
node *Td=rad->dr->dr;
delete(rad->dr);
delete(rad);
rad=new node(Ts,Td,0,1000000000);
del(rad);
}
void print(node *&nod)
{
compute(nod);
if(nod->st!=NULL)
print(nod->st);
fo<<nod->val<<" ";
if(nod->dr)
print(nod->dr);
}
int main()
{
rad=NULL;
int n,trash;
fi>>n>>trash;
srand(time(NULL));
int val=0;
for(int i=1; i<=n; i++)
{
char c;
fi>>c;
if(c=='I')
{
int x,y;
fi>>x>>y;
ins(rad,x-1,y,++val); //modifica
}
else if(c=='A')
{
int x;
fi>>x;
fo<<src(rad,x-1)<<"\n";
}
else if(c=='R')
{
int x,y;
fi>>x>>y;
rev(x,y);
}
else
{
int x,y;
fi>>x>>y;
ers(x,y);
}
}
print(rad);
fi.close();
fo.close();
return 0;
}