#include <bits/stdc++.h>
#define inf 100000000
#define MOD 666013
using namespace std;
int n;
struct Treap {
int key , priority, under;
bool rev;
Treap *left , *right;
Treap() {
key = priority = 0;
under = 0;
rev = false;
left = NULL , right = NULL;
};
Treap(int ke , int priorit,int unde ,bool re ,Treap* &lef, Treap* &righ) {
key = ke , priority = priorit, under = unde , rev = re, left = lef, right = righ;
}
}*Root , *null;
inline void actualizez(Treap* &r) {
if (r == null)
return;
r -> under = r -> left -> under + r -> right -> under + 1;
return ;
}
inline void verific_intersch(Treap* &r) {
if (r == null)
return;
if (r -> rev == false)
return;
swap(r -> left , r -> right);
r -> left -> rev = not r -> left -> rev;
r -> right -> rev = not r -> right -> rev;
r -> rev = not r -> rev;
return ;
}
inline void rotesc_stanga(Treap* &r) {
Treap* nod = r -> left;
r -> left = nod -> right;
nod -> right = r;
r = nod;
actualizez(r -> right);
actualizez(r);
}
inline void rotesc_dreapta(Treap* &r) {
Treap* nod = r -> right;
r -> right = nod -> left;
nod -> left = r;
r = nod;
actualizez(r -> left);
actualizez(r);
}
inline void balans(Treap* &r) {
verific_intersch(r);
if (r -> priority < r -> left -> priority)
verific_intersch(r -> left) , rotesc_stanga(r);
else if (r -> priority < r -> right -> priority)
verific_intersch(r -> right) , rotesc_dreapta(r);
return ;
}
inline void insereaza(Treap* &r , int pos, int val, int prior) {
if (r == null) {
r = new Treap(val , prior, 1, 0, null, null);
return ;
}
verific_intersch(r);
if (r -> left -> under + 1 >= pos)
insereaza(r -> left , pos ,val, prior);
else insereaza(r -> right , pos - r -> left -> under - 1, val, prior);
actualizez(r);
balans(r);
}
inline int access(Treap* &r, int pos) {
verific_intersch(r);
if (r -> left -> under + 1 == pos)
return r -> key;
if (r -> left -> under + 1> pos)
return access(r -> left , pos);
else return access(r -> right , pos - r -> left -> under - 1);
}
inline void split(Treap* &a, Treap* &b, int pos) {
insereaza(a , pos, -1, inf);
b = a -> right;
a = a -> left;
return ;
}
inline void ereis(Treap* &r) {
if (r -> left == null && r -> right == null) {
delete r;
r = null;
return ;
}
verific_intersch(r);
if (r -> left -> priority > r -> right -> priority)
verific_intersch(r -> left) , rotesc_stanga(r);
else verific_intersch(r -> right) , rotesc_dreapta(r);
if (r -> left -> priority == -1)
ereis(r -> left);
else ereis(r -> right);
actualizez(r);
}
inline void join(Treap* &a,Treap* &b, Treap* &c) {
a = new Treap(0 , -1, b -> under + c->under + 1, 0, b , c);
ereis(a);
}
inline void sterge(Treap* &r, int p1, int p2) {
Treap *a = r , *b, *c;
split(a , b, p1);
split(b , c, p2 - p1 + 2);
join(r , a , c);
}
inline void print(Treap* r) {
if (r == null)
return ;
verific_intersch(r);
print(r -> left);
printf("%d ", r -> key);
print(r -> right);
return ;
}
int main() {
freopen("secv8.in" , "r", stdin);
freopen("secv8.out" , "w", stdout);
srand(time(0));
int is;
scanf("%d %d\n", &n, &is);
null = new Treap , Root = new Treap;
null -> under = 0;
Root = null;
for (int i = 1; i<=n; ++i) {
char instr;
int x , y;
scanf("%c ", &instr);
if (instr == 'I') {
scanf("%d %d\n", &x, &y);
insereaza(Root , x, y, rand() % MOD + 1);
continue;
}
if (instr == 'A') {
scanf("%d\n", &x);
printf("%d\n" , access(Root , x));
continue;
}
if (instr == 'R') {
scanf("%d %d\n", &x, &y);
Treap *a = Root, *b, *c, *d;
split(a , b, x);
split(b , c, y + 1 - x + 1);
b -> rev = not b -> rev;
join(Root , a , b);
d = Root;
join(Root , d , c);
}
if (instr == 'D') {
scanf("%d %d\n", &x , &y);
sterge(Root , x , y);
}
}
print(Root);
return 0;
}