#include <fstream>
using namespace std;
ifstream fin ("secv8.in");
ofstream fout ("secv8.out");
struct Treap {
int val,w,rev,pr;
Treap *ls,*rs;
Treap() {
ls=rs=0;
val=w=rev=pr=0;
}
}*R=0,*nil=new Treap;
int n,op,i,value,poz,st,dr,pozitia,costul;
char tip;
void Update(Treap *& nod);
void countT(Treap* &nod);
void mergeT(Treap* &T,Treap* l,Treap* r);
void splitT(Treap* T,Treap* &l,Treap* &r,int poz,int cost);
void ins();
void prop(Treap* &T);
void find_kth(Treap* &T);
void afis(Treap* &T);
void del();
void rev();
int main()
{
fin >> n >> op;
srand(time(nullptr));
for(i = 1;i <= n; ++i) {
fin >> tip;
if(tip == 'I') {
fin >> poz >> value;
ins();
}
if(tip == 'A') {
fin >>pozitia;
costul=0;
find_kth(R);
}
if(tip == 'R'){
fin >> st >> dr;
rev();
}
if(tip=='D') {
fin >> st >> dr;
del();
}
}
afis(R);
return 0;
}
void Update(Treap *& nod) {
if(nod == 0) return;
if(nod->rev) {
swap(nod->ls,nod->rs);
if(nod->ls!=0) nod->ls->rev^=1;
if(nod->rs!=0) nod->rs->rev^=1;
nod->rev=0;
}
}
void countT(Treap* &nod) {
if(nod==0) return;
nod->w=1;
if(nod->ls) nod->w+=nod->ls->w;
if(nod->rs) nod->w+=nod->rs->w;
}
void mergeT(Treap* &T,Treap* l,Treap* r) {
if(l == 0) {
T = r;
return;
}
if(r == 0) {
T = l;
return;
}
Update(l);Update(r);
if(l->pr > r->pr) mergeT(l->rs,l->rs,r),T = l;
else mergeT(r->ls,l,r->ls),T = r;
countT(T);
}
void splitT(Treap* T,Treap* &l,Treap* &r,int poz,int cost) {
if(T == 0) {l = r = 0; return;}
Update(T);
int cnt = cost;
if(T->ls != 0) cnt += T->ls->w;
if(cnt >= poz) {
splitT(T->ls,l,T->ls,poz,cost);
r = T;
}
else {
splitT(T->rs,T->rs,r,poz,cnt+1);
l = T;
}
countT(l);countT(r);
}
void ins()
{
Treap *T,*T1=0,*T2=0;
T=new Treap;
T->w=1;
T->pr=rand();T->val=value;
if(poz==1)
{
mergeT(R,T,R);
return;
}
if(poz<=R->w)
{
splitT(R,T1,T2,poz-1,0);
mergeT(R,T1,T);
mergeT(R,R,T2);
}
else
{
mergeT(R,R,T);
}
}
void prop(Treap* &T) {
Update(T);
if(T->rs == 0) {fout << T->val <<'\n';
return;
}
prop(T->rs);
}
void find_kth(Treap* &T)
{
Update(T);
int cnt=costul;
if(T->ls) cnt+=T->ls->w;
if(cnt<=pozitia)
{
costul=cnt;
if(pozitia==costul)
{
prop(T->ls);
return;
}
costul++;
if(pozitia==costul)
{
fout<<T->val<<'\n';
return;
}
find_kth(T->rs);
}
else find_kth(T->ls);
}
void afis(Treap* &T)
{
if(T == 0) return;
Update(T);
afis(T->ls);
fout << T-> val << ' ';
afis(T->rs);
}
void rev() {
Treap *T1=0,*T2=0,*T3=0,*T4=0;
splitT(R,T1,T2,st-1,0);
splitT(T2,T3,T4,dr-st+1,0);
T3 -> rev ^= 1;
mergeT(R,T1,T3);
mergeT(R,R,T4);
}
void del() {
Treap *T1,*T2,*T3,*T4;
splitT(R,T1,T2,st-1,0);
splitT(T2,T3,T4,dr-st+1,0);
mergeT(R,T1,T4);
}