#include <iostream>
#include <cstdio>
using namespace std;
const int N = 100010;
int e[N], l[N], r[N], idx;
int m;
void init()
{
r[0] = 1; //头节点的左边指向尾节点
l[1] = 0; //尾节点的右边指向头节点
idx = 2; //初始化之后的节点下标从2开始
}
//在第k个插入的数右侧插入一个数
//在第k个插入的数左侧插入一个数?? 即
void add(int k, int x)
{
e[idx] = x; //二话不说,先存起来
r[idx] = r[k]; //step1
l[idx] = k; //step2
l[r[k]] = idx; //step3
r[k] = idx; //step4
idx ++; //为下一次插入新节点做准备
}
void del(int k)
{
r[l[k]] = r[k]; //step1
l[r[k]] = l[k]; //step2
}
int main()
{
init();
cin>>m;
while(m--)
{
string op;
int k, x;
cin>>op;
if(op == "L") //表示在链表的最左端插入数x。== 在头节点的右边插入
{
cin>>x;
add(0, x);
}
else if(op == "R") //表示在链表的最右端插入数x。== 在尾节点的左边插入,== 在尾节点前一个节点的右边插入
{
cin>>x;
add(l[1], x);
}
else if(op == "D") //表示将第k个插入的数删除
{
cin>>k;
del(k+1); //第k个插入的数的下标为k+1
}
else if(op == "IL") //表示在第k个插入的数左侧插入一个数 == 在第k-1个数后面插入一个数
{
cin>>k>>x;
add(l[k+1], x);
}
else //表示在第k个插入的数右侧插入一个数。
{
cin>>k>>x;
add(k+1, x); //第k个插入的数的下标为k+1
}
}
int head = 0, tail = 1;
for(int i = r[head]; i != tail; i = r[i])
cout<<e[i]<<" ";
cout<<endl;
return 0;
}