#include <bits/stdc++.h>
using namespace std;
const int MOD = 1e8 + 7;
const int inf = 1e9;
ifstream f("secv8.in");
ofstream g("secv8.out");
struct treap{
int sub, v, g;
bool inv;
treap *st, *dr;
treap(treap* stanga, treap* dreapta, int subarb, int val, int greutate, bool invers){
st = stanga;
dr = dreapta;
sub = subarb;
v = val;
g = greutate;
inv = invers;
}
}*root, *NILL, *t1, *t2, *t3;
int gen(){return ((rand()<<10)+rand())%MOD + 1; }
void recount(treap*& node){if(node == NILL) return; node->sub = node->st->sub + node->dr->sub + 1;}
void check(treap*& node){
if(!(node->inv)) return;
swap(node->st, node->dr);
if(node->st!=NILL) node->st->inv ^= 1;
if(node->dr!=NILL) node->dr->inv ^= 1;
node->inv = 0;
}
void roleft(treap*& node){
treap* aux = node->st;
node->st = aux->dr;
aux->dr = node;
node = aux;
recount(node->st);
recount(node->dr);
recount(node);
}
void roright(treap*& node){
treap* aux = node->dr;
node->dr = aux->st;
aux->st = node;
node = aux;
recount(node->st);
recount(node->dr);
recount(node);
}
void balance(treap*& node){
if(node == NILL) return;
check(node);
if(node->st != NILL && node->st->g > node->g){
check(node->st);
roleft(node);
}
if(node->dr != NILL && node->dr->g > node->g){
check(node->dr);
roright(node);
}
}
void baga(treap*& node, int poz, int val, int g){
if(node == NILL){
node = new treap(NILL, NILL, 1, val, g, 0);
return;
}
check(node);
if(node->st->sub >= poz) baga(node->st, poz, val, g);
else baga(node->dr, poz-node->st->sub-1, val, g);
recount(node);
balance(node);
}
void sterge(treap*& node, int poz){
check(node);
if(node->st->sub >= poz) sterge(node->st, poz);
else if(node->st->sub + 1 < poz) sterge(node->dr, poz - node->st->sub- 1);
else{
if(node->st == NILL && node->dr == NILL){
node = NILL;
return;
}
if(node->st->g > node->dr->g && node->st != NILL){
check(node->st);
roleft(node);
}
else{
check(node->dr);
roright(node);
}
sterge(node, poz);
}
recount(node);
}
int gaseste(treap*& node, int poz){
if(node == NILL) return -1;
check(node);
if(node->st->sub+1 == poz) return node->v;
if(node->st->sub >= poz) return gaseste(node->st, poz);
return gaseste(node->dr, poz-node->st->sub-1);
}
void split(int a, int b){
t1 = t2 = t3 = NILL;
baga(root, a-1, 0, inf);
t1 = root->st;
root = root->dr;
baga(root, b-a+1, 0, inf);
t2 = root->st;
t3 = root->dr;
}
treap *join(treap* a, treap* b){
treap* temp = new treap(a, b, 0, 0, -1, 0);
recount(temp);
sterge(temp, temp->st->sub+1);
return temp;
}
void scrie(treap*& node){
if(node == NILL) return;
scrie(node->st);
g << node->v << ' ';
scrie(node->dr);
}
int main(){
int n, x;
f >> n >> x;
NILL = new treap(NULL, NULL, 0, 0, 0, 0);
root = NILL;
while(n--){
char cd;
int a, b;
f >> cd;
f >> a;
if(cd != 'A') f >> b;
if(cd == 'I') baga(root, a-1, b, gen());
if(cd == 'A') g << gaseste(root, a) << '\n';
if(cd == 'R'){
split(a, b);
t2->inv ^= 1;
root = join(t1, t2);
root = join(root, t3);
}
if(cd == 'D'){
split(a, b);
root = join(t1, t3);
}
}
scrie(root);
}