#include <iostream>
using namespace std;
const int N = 100010;
int m;
int e[N], l[N], r[N], idx;
void init() { // 注意这里初始化是双链表特有的
r[0] = 1;
l[1] = 0;
idx = 2;
}
//在k的右边插入x (其他插入操作可以归到这一种操作上)
void add(int k, int x) { // 插入操作的4步分清楚即可
e[idx] = x;
r[idx] = r[k];
l[idx] = k;
l[r[k]] = idx;
r[k] = idx ++;
}
void remove(int k) {
r[l[k]] = r[k];
l[r[k]] = l[k];
}
int main () {
cin >> m;
init();
while (m --) {
int k, x;
string op;
cin >> op;
if (op == "L") {
cin >> x;
add(0, x);
} else if (op == "R") {
cin >> x;
add(l[1], x);
} else if (op == "D") {
cin >> k;
remove(k + 1);
} else if (op == "IL") {
cin >> k >> x;
add(l[k + 1], x);
} else if (op == "IR") {
cin >> k >> x;
add(k + 1, x);
}
}
for (int i = r[0]; i != 1; i = r[i]) printf("%d ", e[i]); //i从r[0]开始,不是i=0;r[0]才表示第一个实际插入的点,i=r[i],不是i++或i=ne[i]
puts("");
return 0;
}