// Ilie "The-Winner" Dumitru
// Dumnezeu sa o ierte
#include<bits/stdc++.h>
#define sz(x) ((int)(x).size())
#define all(x) (x).begin(), (x).end()
#define err(...) fprintf(stderr, __VA_ARGS__)
using ll=long long;
constexpr int NMAX=100'005;
constexpr ll MOD=1'000'000'007;
std::mt19937 rng(129723);
std::uniform_int_distribution<int> dist(-(1LL<<30), 1LL<<30);
struct Treap
{
struct Node
{
int x, y;
int sz=1;
bool reversed=0;
Node* l=0, *r=0;
Node(int x=0) : x(x), y(dist(rng)) {}
~Node()
{
delete l;
delete r;
}
void propLz()
{
if(reversed)
{
reversed=0;
std::swap(l, r);
if(l)
l->reversed=!l->reversed;
if(r)
r->reversed=!r->reversed;
}
}
void pull()
{
sz=1;
if(l)
sz+=l->sz;
if(r)
sz+=r->sz;
}
};
Node* root=0;
~Treap()
{
delete root;
}
std::pair<Node*, Node*> split(Node* root, int pos)
{
if(root==0)
return {0, 0};
root->propLz();
int szl=root->l ? root->l->sz : 0;
if(pos<=szl)
{
auto p=split(root->l, pos);
root->l=p.second;
p.second=root;
root->pull();
return p;
}
auto p=split(root->r, pos-szl-1);
root->r=p.first;
p.first=root;
root->pull();
return p;
}
Node* merge(Node* l, Node* r)
{
if(l==0)
return r;
if(r==0)
return l;
l->propLz();
r->propLz();
if(l->y<r->y)
{
l->r=merge(l->r, r);
l->r->pull();
l->pull();
return l;
}
r->l=merge(l, r->l);
r->l->pull();
r->pull();
return r;
}
int get(Node* root, int pos)
{
if(root==0)
return 0;
root->propLz();
int szl=root->l ? root->l->sz : 0;
if(pos<szl)
return get(root->l, pos);
if(pos==szl)
return root->x;
return get(root->r, pos-1-szl);
}
int get(int pos)
{
return get(root, pos);
}
void insert(int x, int pos)
{
Node* n=new Node(x);
auto p=split(root, pos);
root=merge(p.first, merge(n, p.second));
}
void reverse(int l, int r)
{
auto d=split(root, r);
auto s=split(d.first, l);
s.second->reversed=!s.second->reversed;
root=merge(merge(s.first, s.second), d.second);
}
void del(int l, int r)
{
auto d=split(root, r);
auto s=split(d.first, l);
root=merge(s.first, d.second);
delete s.second;
}
void print(FILE* g)
{
print(g, root);
fprintf(g, "\n");
}
void print(FILE* g, Node* root)
{
if(root==0)
return;
root->propLz();
print(g, root->l);
fprintf(g, "%d ", root->x);
print(g, root->r);
}
};
int main()
{
FILE* f=fopen("secv8.in", "r"), *g=fopen("secv8.out", "w");
char buf[128];
int _, i, j, x;
Treap T;
fgets(buf, 128, f);
sscanf(buf, "%d", &_);
do
{
fgets(buf, 128, f);
if(buf[0]=='I')
{
sscanf(buf+2, "%d%d", &i, &x);
T.insert(x, i-1);
}
else if(buf[0]=='A')
{
sscanf(buf+2, "%d", &i);
fprintf(g, "%d\n", T.get(i-1));
}
else if(buf[0]=='R')
{
sscanf(buf+2, "%d%d", &i, &j);
T.reverse(i-1, j);
}
else
{
sscanf(buf+2, "%d%d", &i, &j);
T.del(i-1, j);
}
}while(--_);
T.print(g);
fclose(f);
fclose(g);
return 0;
}