#include <fstream>
#include <vector>
#include <cstdlib>
#include <ctime>
using namespace std;
ifstream fin("secv8.in");
ofstream fout("secv8.out");
const int inf= 1<<30;
int cq;
struct tn{
int left, right;
int dim, val, pr, rev;
tn(){
left= 0; right= 0;
val= 0; pr= 0; dim= 0; rev= 0;
}
};
vector <tn> tr;
int root, tn1, tn2, tn3;
inline void tr_dim(int x){
tr[x].dim= tr[tr[x].left].dim+tr[tr[x].right].dim+1;
}
void tr_rev(int x){
if (x==0){
return;
}else if (tr[x].rev==1){
tr[x].rev= 0;
int aux= tr[x].left; tr[x].left= tr[x].right; tr[x].right= aux;
tr[tr[x].left].rev^= 1; tr[tr[x].right].rev^= 1;
}
}
void tr_write(int x){
if (x==0){
return;
}else{
tr_rev(x);
//printf("l ");
tr_write(tr[x].left);
//printf("u ");
//printf("%d ", tr[x].val);
fout<<tr[x].val<<" ";
//printf("r ");
tr_write(tr[x].right);
//printf("u ");
}
}
int tr_rleft(int x){
//printf("%d %d %d\n", tr[x].left, x, tr[x].right);
int aux= tr[x].left;
tr_rev(aux);
tr[x].left= tr[aux].right; tr_dim(x);
tr[aux].right= x; tr_dim(aux);
return aux;
}
int tr_rright(int x){
//printf("%d %d %d\n", tr[x].left, x, tr[x].right);
int aux= tr[x].right;
tr_rev(aux);
tr[x].right= tr[aux].left; tr_dim(x);
tr[aux].left= x; tr_dim(aux);
return aux;
}
int tr_balance(int x){
//printf("%d %d %d\n", tr[x].left, x, tr[x].right);
if (tr[x].pr<tr[tr[x].left].pr){
return tr_rleft(x);
}
if (tr[x].pr<tr[tr[x].right].pr){
return tr_rright(x);
}
return x;
}
int tr_ins(int x, int pos, int val, int pr){
/*if (cq==4){
printf("%d\n", x);
}*/
if (x==0){
//printf("*\n");
x= tr.size();
tr.push_back(tn());
tr[x].val= val; tr[x].pr= pr; tr[x].dim= 1;
}else{
tr_rev(x);
if (pos<=tr[tr[x].left].dim+1){
//printf("l\n");
int aux= tr_ins(tr[x].left, pos, val, pr);
tr[x].left= aux;
}else{
//printf("r\n");
int aux= tr_ins(tr[x].right, pos-tr[tr[x].left].dim-1, val, pr);
tr[x].right= aux;
}
x= tr_balance(x);
tr_dim(x);
}
return x;
}
int tr_que(int x, int pos){
tr_rev(x);
if (pos==tr[tr[x].left].dim+1){
return tr[x].val;
}else if (pos<=tr[tr[x].left].dim){
return tr_que(tr[x].left, pos);
}else{
return tr_que(tr[x].right, pos-tr[tr[x].left].dim-1);
}
}
void tr_spl(int x, int y){
root= tr_ins(root, x, 0, inf);
//tr_write(root); printf("\n");
tn1= tr[root].left; root= tr[root].right;
//tr_write(tn1); printf("\n");
root= tr_ins(root, y-x+2, 0, inf);
//tr_write(root); printf("\n");
tn2= tr[root].left; tn3= tr[root].right;
//tr_write(tn2); printf("\n"); tr_write(tn3); printf("\n");
}
int tr_erase(int x){
//printf("%d %d %d\n", tr[x].left, x, tr[x].right);
tr_rev(x);
if (tr[x].left==0&& tr[x].right==0){
//printf("- %d -\n", x);
return 0;
}else if (tr[tr[x].left].pr>tr[tr[x].right].pr){
x= tr_rleft(x);
tr[x].right= tr_erase(tr[x].right);
//printf("%d %d %d\n", tr[x].left, x, tr[x].right);
}else{
x= tr_rright(x);
tr[x].left= tr_erase(tr[x].left);
//printf("%d %d %d \n", tr[x].left, x, tr[x].right);
}
tr_dim(x);
//printf("%d %d %d\n", tr[x].left, x, tr[x].right);
return x;
}
int tr_join(int x, int y){
int aux= tr.size();
tr.push_back(tn());
tr[aux].left= x; tr[aux].right= y;
//tr_write(aux); printf("\n");
aux= tr_erase(aux);
//printf("%d\n", aux);
//tr_write(aux); printf("\n");
return aux;
}
//int v[7]={0, 1, 2, 2, 0, 4, 3};
int main(){
int nq, ifr;
fin>>nq>>ifr;
tr.push_back(tn());
root= 0;
srand(time(0));
for (cq= 1; cq<=nq; ++cq){
char op;
fin>>op;
//printf("%c\n", op);
if (op=='I'){
int x, y;
fin>>x>>y;
root= tr_ins(root, x, y, rand()%(inf-1));
}else if (op=='A'){
int x;
fin>>x;
fout<<tr_que(root, x)<<"\n";
}else if (op=='R'){
int x, y;
fin>>x>>y;
tr_spl(x, y);
tr[tn2].rev= 1;
//tr_write(tn1); printf("/"); tr_write(tn2); printf("/"); tr_write(tn3); printf("\n");
root= tr_join(tn1, tn2);
//tr_write(root); printf("\n");
root= tr_join(root, tn3);
}else{
int x, y;
fin>>x>>y;
tr_spl(x, y);
root= tr_join(tn1, tn3);
}
//tr_write(root); printf("\n");
}
tr_write(root); printf("\n");
return 0;
}