#include <iostream>
#include <fstream>
#include <ctime>
#include <cstdlib>
using namespace std;
ifstream in ("secv8.in");
ofstream out("secv8.out");
struct Treap {
int sz;
int prio;
int val;
Treap *le;
Treap *ri;
bool rev;
Treap(int inputval) {
sz = 1;
prio = rand();
val = inputval;
le = ri = NULL;
rev = 0;
}
void compute() {
clean();
sz = 1;
if(le != NULL)
sz += le->sz;
if(ri != NULL)
sz += ri->sz;
}
void clean() {
if(rev == 1) {
Treap* aux = le;
le = ri;
ri = aux;
if(le != NULL)
le->rev ^= 1;
if(ri != NULL)
ri->rev ^= 1;
rev = 0;
}
}
};
void merge(Treap* le, Treap* ri, Treap* &ans) {
if(le == NULL) {
ans = ri;
} else if(ri == NULL) {
ans = le;
} else {
le->compute();
ri->compute();
if(le->prio < ri->prio) {
merge(le, ri->le, ri->le);
ans = ri;
} else {
merge(le->ri, ri, le->ri);
ans = le;
}
}
if(ans != NULL)
ans->compute();
}
void split(Treap* input, int pos, Treap* &le, Treap* &ri) {
if(input == NULL) {
le = ri = NULL;
} else {
input->compute();
int key = 1;
if(input->le != NULL)
key += input->le->sz;
if(key <= pos) {
split(input->ri, pos - key, input->ri, ri);
le = input;
le->compute();
} else {
split(input->le, pos, le, input->le);
ri = input;
ri->compute();
}
}
}
void Sinsert(Treap* &root, int pos, int val) {
Treap *le, *ri, *le2;
split(root, pos - 1, le, ri);
Treap* nod = new Treap(val);
merge(le, nod, le2);
merge(le2, ri, root);
}
int Saccess(Treap* &root, int pos) {
Treap *le, *ri, *le2, *ri2;
split(root, pos, le, ri);
split(le, pos - 1, le2, ri2);
int ans = ri2->val;
merge(le2, ri2, le);
merge(le, ri, root);
return ans;
}
int Sreverse(Treap* &root, int i, int j) {
Treap *le, *ri, *le2, *ri2;
split(root, j, le, ri);
split(le, i - 1, le2, ri2);
if(ri2 != NULL)
ri2->rev ^= 1;
merge(le2, ri2, le);
merge(le, ri, root);
}
int Sdelete(Treap* &root, int i, int j) {
Treap *le, *ri, *le2, *ri2;
split(root, j, le, ri);
split(le, i - 1, le2, ri2);
merge(le2, ri, root);
}
int main() {
srand(time(NULL));
Treap* root = NULL;
int n, nothing;
in >> n >> nothing;
for(int i = 1; i <= n; ++ i) {
char c;
in >> c;
if(c == 'I') {
int a, b;
in >> a >> b;
Sinsert(root, a, b);
} else if(c == 'A') {
int a;
in >> a;
out << Saccess(root, a) << '\n';
} else if(c == 'R') {
int a, b;
in >> a >> b;
Sreverse(root, a, b);
} else if(c == 'D') {
int a, b;
in >> a >> b;
Sdelete(root, a, b);
}
}
for(int i = 1; i <= root->sz; ++ i) {
out << Saccess(root, i) << " ";
}
return 0;
}