#include<iostream>
using namespace std;
const int N = 100010;
int head,idx,e[N],ne[N];
void init(){
head = -1;
idx = 0;
}
void add_to_head(int x){
e[idx] = x;
ne[idx] = head;
head = idx ++;
}
void add(int k,int x){
e[idx] = x;
ne[idx] = ne[k];
ne[k] = idx++;
}
void remove(int k){
ne[k] = ne[ne[k]];
}
int main(){
int m = 0;
cin >> m;
//记得初始化
init();
while (m --){
char op;
cin >> op;
//注意要加个空格吸收回车
//scanf(" %c",&op);
if(op == 'H' ){
int x;
cin >> x;
add_to_head(x);
}
if(op == 'D' ){
int k;
cin >> k;
if(!k)head = ne[head];
else remove(k-1);
}
if(op == 'I' ){
int k,x;
cin >> k >> x;
add(k-1,x);
}
}
for(int i = head;i!=-1;i = ne[i])cout << e[i] << " ";
cout << endl;
return 0;
}
/*#include <iostream>
#include <cstring>
using namespace std;
const int N = 100;
int head, e[N], ne[N], idx;
// 尾插法
void add(int x) {
e[idx] = x;
ne[idx] = -1; // 先连
if (!idx) head = idx; // 后断
else ne[idx - 1] = idx; // 后断
idx++;
}
int main() {
head = -1, idx = 0; // 初始化
// 尾插法插入元素 x
for (int x = 1; x <= 10; x++) add(x);
for (int i = head; i != -1; i = ne[i]) cout << e[i] << " ";
}
*/