#include<bits/stdc++.h>
using namespace std;
const int sqn = 520;
int cnt, gb, qwq;
struct node{
public:
int nxt, siz;
string vl;
}lis[sqn << 4];
int nw(int qq){
lis[qq].nxt = cnt + 1;
++cnt;
lis[cnt].siz = 0;
lis[cnt].vl = "";
lis[cnt].nxt = -1;
return cnt;
}
void mg(int u, int v){
for (int i = 1; i <= lis[v].siz; i++)
lis[u].vl += lis[v].vl[i];
lis[u].nxt = lis[v].nxt;
lis[u].siz += lis[v].siz;
lis[v].vl = "";
lis[v].siz = 0;
lis[v].nxt = -1;
}
void spt(int u, int k){
int unx = lis[u].nxt;
int nid = nw(u);
string s1 = "", s2 = "";
for (int i = 1; i <= k; i++)
s1 += lis[u].vl[i];
for (int i = k + 1; i <= lis[u].siz; i++)
s2 += lis[u].vl[i];
lis[u].vl = (string)" " + s1;
lis[nid].vl = (string)" " + s2;
lis[u].siz = s1.size();
lis[nid].siz = s2.size();
lis[nid].nxt = unx;
}
string gst(int s_siz){
string res;
char ch;
for (int i = 1; i <= s_siz; i++){
ch = getchar();
if (ch <= '\n' || ch >= '\r'){
i--;
continue;
}
res += ch;
}
return res;
}
void ins(int u, string x){
if (cnt == 0){
int v = nw(0);
lis[v].vl = " " + x;
lis[v].siz = x.size();
}
int qz = 0, pre = 0;
for (int v = 0; v != -1; v = lis[v].nxt){
if (qz < u && qz + lis[v].siz >= u){
spt(v, u);
lis[v].vl += x;
lis[v].siz += x.size();
if (v != 0 && lis[pre].siz < lis[lis[v].nxt].siz)
if (lis[v].siz + lis[pre].siz < sqn)
mg(pre, v);
else if (lis[v].nxt != -1)
if (lis[v].siz + lis[lis[v].nxt].siz < sqn)
mg(v, lis[v].nxt);
return;
}
qz += lis[v].siz;
pre = v;
}
}
void bdel(int u, int pre){
lis[pre].nxt = lis[u].nxt;
lis[u].vl = "";
lis[u].siz = 0;
}
void del(int l, int r){
int qz = 0, pre = 0;
for (int v = 0; v != -1; v = lis[v].nxt){
int kr = qz + lis[v].siz;
if (kr < l)
continue;
if (qz > r)
break;
if (qz >= l && kr <= r)
bdel(v, pre);
else{
if (qz < l){
spt(v, l - 1);
bdel(pre, v);
}else{
spt(v, r);
bdel(v, lis[v].nxt);
}
if (lis[pre].siz < lis[lis[v].nxt].siz)
if (lis[v].siz + lis[pre].siz < sqn)
mg(pre, v);
else
if (lis[v].siz + lis[lis[v].nxt].siz < sqn)
mg(v, lis[v].nxt);
}
pre = v;
qz += lis[v].siz;
}
}
void get(int l, int r){
int qz = 0, pre = 0;
for (int v = 0; v != -1; v = lis[v].nxt){
int kr = qz + lis[v].siz;
if (qz >= l && kr <= r)
for (int i = 1; i <= lis[v].siz; i++)
putchar(lis[v].vl[i]);
else{
if (qz < l)
for (int i = l; i <= kr; i++)
putchar(lis[v].vl[i]);
else
for (int i = qz; i <= r; i++)
putchar(lis[v].vl[i]);
}
pre = v;
qz += lis[v].siz;
}
}
int main(){
scanf("%d", &qwq);
while (qwq--){
string op;
cin >> op;
if (op == "Insert"){
int lnt;
scanf("%d", &lnt);
ins(gb, gst(lnt));
}else if (op == "Delete"){
int x;
scanf("%d", &x);
del(gb, gb + x);
}else if (op == "Get"){
int x;
scanf("%d", &x);
get(gb, gb + x);
putchar('\n');
}else if (op == "Move"){
int x;
scanf("%d", &x);
gb = x;
}else if (op == "Prev")
gb--;
else if (op == "Next")
gb++;
}
}