#include <cstdio>
#include <cstdlib>
#include <ctime>
typedef struct _T{
_T *l, *r;
int key, prio, size;
bool lazy;
_T(int k) {
key = k;
prio = rand() ^ rand() ^ rand();
lazy = false;
l = r = NULL;
size = 1;
}
~_T() {
delete l;
delete r;
}
void rec() {
size = 1;
prop();
if(l != NULL) size += l -> size;
if(r != NULL) size += r -> size;
}
void prop() {
if(lazy) {
_T *aux = l;
l = r;
r = aux;
lazy = false;
if(l != NULL) l -> lazy ^= 1;
if(r != NULL) r -> lazy ^= 1;
}
}
} *Treap;
int getsize(Treap x) {
if(x == NULL)
return 0;
x -> rec();
return x -> size;
}
Treap join(Treap a, Treap b) {
if(a == NULL) return b;
if(b == NULL) return a;
a -> rec();
b -> rec();
if(a -> prio < b -> prio) {
a -> r = join(a -> r, b);
a -> rec();
return a;
} else {
b -> l = join(a, b -> l);
b -> rec();
return b;
}
}
void split(Treap x, int poz, Treap &l, Treap &r, int left) {
l = r = NULL;
if(x == NULL)
return;
x -> rec();
int p = left + 1 + getsize(x -> l);
if(p < poz) {
split(x -> r, poz, x -> r, r, p);
l = x;
l -> rec();
} else {
split(x -> l, poz, l, x -> l, left);
r = x;
r -> rec();
}
}
Treap add(Treap x, int k, int poz) {
Treap l, r;
split(x, poz, l, r, 0);
return join(join(l, new _T(k)), r);
}
Treap del(Treap x, int a, int b) {
Treap l, m, r;
split(x, b + 1, m, r, 0);
split(m, a, l, m, 0);
delete(m);
return join(l, r);
}
int acces(Treap x, int poz) {
int val;
Treap l, m, r;
split(x, poz + 1, m, r, 0);
split(m, poz, l, m, 0);
val = m -> key;
join(join(l, m), r);
return val;
}
Treap rev(Treap x, int a, int b) {
Treap l, m, r;
split(x, b + 1, m, r, 0);
split(m, a, l, m, 0);
m -> lazy ^= 1;
return join(join(l, m), r);
}
char getch(FILE *fin) {
char ch = fgetc(fin);
while(ch == ' ' || ch == '\n')
ch = fgetc(fin);
return ch;
}
void debug(Treap x) {
for(int i = 0; i < getsize(x); ++i)
printf("!%d ", acces(x, i + 1));
printf("\n");
}
int main() {
int m, garb, a, b, c;
char tip;
Treap x = NULL;
srand(time(NULL));
FILE *fin = fopen("secv8.in", "r");
FILE *fout = fopen("secv8.out", "w");
fscanf(fin, "%d%d", &m, &garb);
for(int i = 0; i < m; ++i) {
tip = getch(fin);
if(tip == 'I') {
fscanf(fin, "%d%d", &a, &b);
x = add(x, b, a);
} else if(tip == 'D') {
fscanf(fin, "%d%d", &a, &b);
x = del(x, a, b);
} else if(tip == 'A') {
fscanf(fin, "%d", &a);
fprintf(fout, "%d\n", acces(x, a));
} else {
fscanf(fin, "%d%d", &a, &b);
x = rev(x, a, b);
}
}
for(int i = 0; i < getsize(x); ++i)
fprintf(fout, "%d ", acces(x, i + 1));
fclose(fin);
fclose(fout);
return 0;
}