#include <fstream>
#include <cstdlib>
#include <ctime>
#include <cassert>
using namespace std;
ifstream fin("secv8.in");
ofstream fout("secv8.out");
struct Node {
Node(int value, int priority, int size, Node *ls, Node *rs)
: value(value), priority(priority),
size(size), rev(false), ls(ls), rs(rs) {}
int value, priority, size;
bool rev;
Node *ls, *rs;
} *treap, *nil = new Node(0, -1, 0, nullptr, nullptr);
void RotateLeft(Node *&node) {
Node *aux = node->rs;
node->rs = aux->ls;
aux->ls = node;
node = aux;
node->ls->size -= node->size;
node->size += node->ls->size;
}
void RotateRight(Node *&node) {
Node *aux = node->ls;
node->ls = aux->rs;
aux->rs = node;
node = aux;
node->rs->size -= node->size;
node->size += node->rs->size;
}
void Balance(Node *&node) {
if (node->ls->priority > node->priority)
RotateRight(node);
else if (node->rs->priority > node->priority)
RotateLeft(node);
}
void Insert(Node *&node, int pos, int value, int priority) {
if (node == nil) {
node = new Node(value, priority, 1, nil, nil);
return;
}
++node->size;
if (pos <= node->ls->size + 1)
Insert(node->ls, pos, value, priority);
else
Insert(node->rs, pos - node->ls->size - 1, value, priority);
Balance(node);
}
int GetValue(Node *node, int pos) {
assert(pos <= node->size);
if (pos == node->ls->size + 1)
return node->value;
if (pos <= node->ls->size)
return GetValue(node->ls, pos);
else
return GetValue(node->rs, pos - node->ls->size - 1);
}
void Erase(Node *&node, int pos) {
if (pos != node->ls->size + 1) {
if (pos <= node->ls->size)
Erase(node->ls, pos);
else
Erase(node->rs, pos - node->ls->size - 1);
--node->size;
return;
}
if (node->ls == nil && node->rs == nil) {
delete node;
node = nil;
return;
}
if (node->ls->priority > node->rs->priority) {
RotateRight(node);
Erase(node->rs, node->rs->ls->size + 1);
} else {
RotateLeft(node);
Erase(node->ls, node->ls->ls->size + 1);
}
--node->size;
}
void Print(Node *node) {
if (node == nil)
return;
Print(node->ls);
fout << node->value << " ";
Print(node->rs);
}
int main() {
srand(time(0));
treap = nil;
int t, rev;
fin >> t >> rev;
while (t--) {
char type;
int x, y;
fin >> type;
switch (type) {
case 'I':
fin >> x >> y;
Insert(treap, x, y, rand());
break;
case 'A':
fin >> x;
fout << GetValue(treap, x) << "\n";
break;
case 'R':
fin >> x >> y;
break;
default:
fin >> x >> y;
for (int i = x; i <= y; ++i)
Erase(treap, x);
}
}
Print(treap);
fout << "\n";
return 0;
}