// Lisp indent is good for your health
#include <bits/stdc++.h>
using namespace std;
const int INF = 0x7FFFFFFF;
struct T {
int val, siz, pr;
bool rev;
T *st, *dr; } nil {0, 0, -1, false, 0x00, 0x00};
void reset(T *a) {
a->siz = a->st->siz + a->dr->siz + 1; }
void prop(T *a) {
if(a->rev) {
a->rev = 0;
a->st->rev^= 1;
a->dr->rev^= 1;
swap(a->st, a->dr); } }
T* join(T *a, T *b) {
if(a == &nil) return b;
if(b == &nil) return a;
prop(a);
prop(b);
if(a->pr > b->pr) {
a->dr = join(a->dr, b);
reset(a);
return a; }
else {
b->st = join(a, b->st);
reset(b);
return b; } }
T* join3(T *a, T *b, T *c) {
return join(a, join(b, c)); }
pair<T*, T*> split(T *nod, int pos) {
if(nod == &nil) return make_pair(&nil, &nil);
if(nod->st->siz == pos) {
T *tmp = nod->st;
nod->st = &nil;
reset(nod);
return make_pair(tmp, nod); }
if(nod->st->siz > pos) {
auto tmp = split(nod->st, pos);
nod->st = tmp.second;
reset(nod);
return make_pair(tmp.first, nod); }
if(nod->st->siz < pos) {
auto tmp = split(nod->dr, pos-nod->st->siz-1);
nod->dr = tmp.first;
reset(nod);
make_pair(nod, tmp.second); } }
tuple<T*, T*, T*> split3(T* nod, int x, int y) {
auto a = split(nod, y);
auto b = split(a.first, x);
return make_tuple(b.first, b.second, a.second); }
T* reverse(T *nod, int x, int y) {
auto tp = split3(nod, x, y);
get<1>(tp)->rev^= 1;
return join3(get<0>(tp), get<1>(tp), get<2>(tp)); }
T* insert(T *nod, int pos, int val) {
auto pr = split(nod, pos);
return join3(pr.first, new T {val, 1, rand(), false, &nil, &nil}, pr.second); }
T* remove(T *nod, int x, int y) {
auto tp = split3(nod, x, y);
return join(get<0>(tp), get<2>(tp)); }
T *kth(T *nod, int pos) {
prop(nod);
if(nod->st->siz == pos) return nod;
if(nod->st->siz > pos) return kth(nod->st, pos);
if(nod->st->siz < pos) return kth(nod->dr, pos-nod->st->siz-1); }
void dfs(T *nod) {
if(nod == &nil) return;
prop(nod);
dfs(nod->st);
if(nod->val > 0)
printf("%d ", nod->val);
dfs(nod->dr); }
int main(void) {
freopen("secv8.in", "r", stdin);
freopen("secv8.out", "w", stdout);
int m, val, pos, x, y, junk;
char op;
T *root;
root = &nil;
srand(time(NULL));
scanf("%d%d", &m, &junk);
while(m--) {
scanf(" %c", &op);
switch(op) {
case 'I': {
scanf("%d%d", &pos, &val);
root = insert(root, pos-1, val);
break; }
case 'R': {
scanf("%d%d", &x, &y);
root = reverse(root, x-1, y);
break; }
case 'A': {
scanf("%d", &pos);
printf("%d\n", kth(root, pos-1)->val);
break; }
case 'D': {
scanf("%d%d", &x, &y);
root = remove(root, x-1, y);
break; } } }
dfs(root);
printf("\n");
return 0; }
/*
Catelus cu parul cret,
Fura rata din cotet.
El se jura ca nu fura
Si l-am prins cu rata-n gura
Si cu ou-n buzunar,
Hai la Sfatul Popular.
Nu ma duc c-am fost o data
Si am cazut cu nasu’-n balta.
=========================================
L-aţi văzut cumva pe Zdreanţă,
Cel cu ochii de faianţă?
E un câine zdrenţuros
De flocos, dar e frumos.
Parcă-i strâns din petice,
Ca să-l tot împiedice,
Ferfeniţele-i atârnă
Şi pe ochi, pe nara cârnă,
Şi se-ncurcă şi descurcă,
Parcă-i scos din calţi pe furcă.
Are însă o ureche
De pungaş fără pareche.
Dă târcoale la coteţ,
Ciufulit şi-aşa lăieţ,
Aşteptând un ceas şi două
O găină să se ouă,
Care cântă cotcodace,
Proaspăt oul când şi-l face.
De când e-n gospodărie
Multe a-nvăţat şi ştie,
Şi, pe brânci, târâş, grăbiş,
Se strecoară pe furiş.
Pune laba, ia cu botul
Şi-nghite oul cu totul.
- "Unde-i oul? a-ntrebat
Gospodina. - "L-a mâncat!"
"Stai niţel, că te dezvăţ
Fără mătură şi băţ.
Te învaţă mama minte."
Şi i-a dat un ou fierbinte.
Dar decum l-a îmbucat,
Zdreanţă l-a şi lepădat
Şi-a-njurat cu un lătrat.
Când se uita la găină,
Cu culcuşul lui, vecină,
Zice Zdreanţă-n gândul lui
"S-a făcut a dracului!"
=========================================
"Autismul se manifesta in moduri misterioase." - "Tovarasa" - 2016
*/