#include <bits/stdc++.h>
using namespace std;
unsigned seed = chrono :: system_clock :: now().time_since_epoch().count();
mt19937 rng(seed);
struct treap {
int x, sz, pr;
bool rev;
treap *l, *r;
treap(int x) : x(x), sz(1), pr(rng()), l(NULL), r(NULL), rev(false) {}
friend int size(treap *t) { return t ? t -> sz : 0; }
friend void update(treap *t) { if(!t) return; t -> sz = 1 + size(t -> l) + size(t -> r); }
friend void mirror(treap *t) { if(!t) return; t -> rev ^= 1; swap(t -> l, t -> r); }
friend void prop(treap *t) { if(!t || !t -> rev) return; t -> rev = 0; mirror(t -> l); mirror(t -> r); }
};
treap *merge(treap *l, treap *r) {
if(!l) return r;
if(!r) return l;
prop(l); prop(r);
if(l -> pr >= r -> pr) {
l -> r = merge(l -> r, r);
update(l);
return l;
} else {
r -> l = merge(l, r -> l);
update(r);
return r;
}
}
array <treap*, 2> split(treap *t, int k) {
if(!t) return {NULL, NULL};
prop(t);
if(size(t -> l) >= k) {
auto [l, r] = split(t -> l, k);
t -> l = r;
update(t);
return {l, t};
} else {
auto [l, r] = split(t -> r, k - size(t -> l) - 1);
t -> r = l;
update(t);
return {t, r};
}
}
treap *root = NULL;
int& access(treap *t, int k) {
prop(t);
if(size(t -> l) >= k) return access(t -> l, k);
if(size(t -> l) + 1 == k) return t -> x;
return access(t -> r, k - size(t -> l) - 1);
}
array <treap*, 3> splice(treap *t, int a, int b) { /// Splice [a, b)
auto [aux, r] = split(t, b);
auto [l, m] = split(aux, a);
return {l, m, r};
}
void insert(int k, int val) {
auto [l, r] = split(root, k);
root = merge(l, merge(new treap(val), r));
}
void del(int a, int b) {
auto [l, m, r] = splice(root, a, b);
root = merge(l, r);
}
void mirror(int a, int b) {
auto [l, m, r] = splice(root, a, b);
mirror(m);
root = merge(l, merge(m, r));
}
int main()
{
ifstream cin("secv8.in");
ofstream cout("secv8.out");
int q, aux;
cin >> q >> aux;
while(q--) {
char type;
int k, i, j, x;
cin >> type;
switch(type) {
case 'I': cin >>k >> x; insert(k - 1, x); break;
case 'R': cin >> i >> j; mirror(i - 1, j); break;
case 'D': cin >> i >> j; del(i - 1, j); break;
case 'A': cin >> k; cout << access(root, k) << "\n"; break;
}
}
auto print = [&](treap *t, auto self) {
if(!t) return;
prop(t);
self(t -> l, self);
cout << t -> x << " ";
self(t -> r, self);
};
print(root, print);
return 0;
}