#include <bits/stdc++.h>
using namespace std;
typedef struct Treap {
int prio, id, sz, rv;
Treap *l, *r;
void update() {
sz = 1;
if (l != 0) sz += l->sz;
if (r != 0) sz += r->sz;
if (rv) {
rv = 0;
swap(l,r);
if (l != 0) l->rv ^= 1;
if (r != 0) r->rv ^= 1;
}
}
Treap(int key) { id = key, sz = 1, prio = rand() + 1, rv = 0, l = r = 0; }
} *T;
int getSize(T n) {
if (!n) return 0;
n->update();
return n->sz;
}
T Merge(T l, T r) {
if (!l) return r;
if (!r) return l;
l->update(), r->update();
if (l->prio >= r->prio) {
l->r = Merge(l->r,r);
l->update();
return l;
} else {
r->l = Merge(l,r->l);
r->update();
return r;
}
}
void Split(T n, int pos, T &l, T &r) {
l = r = 0;
if (!n) return;
n->update();
int p = getSize(n->l) + 1;
if (p < pos) {
Split(n->r,pos-p,n->r,r);
l = n;
l->update();
} else {
Split(n->l,pos,l,n->l);
r = n;
r->update();
}
}
T Insert(T n, int pos, int id) {
T l, r;
Split(n,pos,l,r);
return Merge(Merge(l, new Treap(id)), r);
}
int Get(T &n, int pos) {
T l, mi, r;
Split(n,pos,l,mi);
Split(mi,2,mi,r);
n = Merge(Merge(l,mi),r);
return mi->id;
}
T Delete(T n, int lpos, int rpos) {
T l, mi, r;
Split(n,rpos+1,mi,r);
Split(mi,lpos,l,mi);
delete(mi);
return Merge(l,r);
}
T Reverse(T n, int lpos, int rpos) {
T l, mi, r;
Split(n,rpos+1,mi,r);
Split(mi,lpos,l,mi);
mi->rv ^= 1;
return Merge(Merge(l,mi), r);
}
int main() {
srand(time(nullptr));
freopen("secv8.in","r",stdin);
freopen("secv8.out","w",stdout);
ios_base::sync_with_stdio(0);
int q, v;
cin >> q >> v;
T root = 0;
while (q--) {
int k, e, i, j;
char ch;
cin >> ch;
if (ch == 'I') {
cin >> k >> e;
root = Insert(root,k,e);
} else if (ch == 'A') {
cin >> k;
printf("%d\n", Get(root,k));
} else {
cin >> i >> j;
if (ch == 'R') root = Reverse(root,i,j);
else root = Delete(root,i,j);
}
}
int n = getSize(root);
for (int i = 1; i <= n; i++) printf("%d ", Get(root,i));
}