#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using pii = pair<int, int>;
#define cin fin
#define cout fout
ifstream cin("secv8.in");
ofstream cout("secv8.out");
mt19937 rng(time(NULL));
struct Treap
{
struct item
{
int prior, value, cnt;
bool rev;
item* l;
item* r;
item(int x = 0): prior(rng()), value(x), cnt(1), rev(false), l(nullptr), r(nullptr) {}
};
using pitem = item*;
pitem root = nullptr;
int cnt(pitem it)
{
return it? it -> cnt: 0;
}
void upd_cnt(pitem& it)
{
it -> cnt = cnt(it -> l) + cnt(it -> r) + 1;
}
void push(pitem& it)
{
if(it && it -> rev)
{
it -> rev = false;
swap(it -> l, it -> r);
if(it -> l)
it -> l -> rev ^= 1;
if(it -> r)
it -> r -> rev ^= 1;
}
}
void merge(pitem& it, pitem l, pitem r)
{
if(!l || !r)
{
it = l? l: r;
return;
}
push(it);
if(l -> prior > r -> prior)
{
merge(l -> r, l -> r, r);
it = l;
}
else
{
merge(r -> l, l, r -> l);
it = r;
}
upd_cnt(it);
}
void split(pitem it, pitem& l, pitem& r, int pos)
{
if(!it)
{
l = r = nullptr;
return;
}
push(it);
int szl = cnt(it -> l) + 1;
if(szl <= pos)
{
split(it -> r, it -> r, r, pos - szl);
l = it;
}
else
{
split(it -> l, l, it -> l, pos);
r = it;
}
upd_cnt(it);
}
void insert(int pos, int value)
{
pitem t1, t2;
split(root, t1, t2, pos - 1);
merge(root, t1, new item(value));
merge(root, root, t2);
}
int access(int pos)
{
pitem t1, t2, t3;
split(root, t1, t2, pos - 1);
split(t2, t2, t3, 1);
int val = t2 -> value;
merge(root, t1, t2);
merge(root, root, t3);
// delete(t1);
// delete(t2);
// delete(t3);
return val;
}
void reverse(int l, int r)
{
pitem t1, t2, t3;
split(root, t1, t2, l - 1);
split(t2, t2, t3, r - l + 1);
t2 -> rev ^= 1;
merge(root, t1, t2);
merge(root, root, t3);
}
void erase(int l, int r)
{
pitem t1, t2, t3;
split(root, t1, t2, l - 1);
split(t2, t2, t3, r - l + 1);
merge(root, t1, t3);
}
void output(pitem it)
{
push(it);
if(!it)
return;
output(it -> l);
cout << it -> value << ' ';
output(it -> r);
}
};
Treap treap;
int32_t main()
{
int q, slab;
cin >> q >> slab;
// treap.insert(1, 1);
// treap.insert(2, 2);
// treap.insert(2, 3);
// treap.reverse(1, 3);
// cout << treap.access(1);
while(q--)
{
char ch;
cin >> ch;
int x, y;
if(ch == 'I')
{
cin >> x >> y;
treap.insert(x, y);
}
if(ch == 'A')
{
cin >> x;
cout << treap.access(x) << '\n';
}
if(ch == 'R')
{
cin >> x >> y;
treap.reverse(x, y);
}
if(ch == 'D')
{
cin >> x >> y;
treap.erase(x, y);
}
}
treap.output(treap.root);
return 0;
}