include [HTML_REMOVED]
using namespace std;
const int N = 100010;
//使用数组模拟单链表
//链表不能直接找到某一个数值,因为在数组模拟单链表中是乱序的,必须通过遍历头指针开始
//才能找到
int head; //头节点
int e[N]; //每个节点所拥有的值
int ne[N]; //每个节点所指向的下一个节点
int idx; //处理指针,记录当前使用到哪一个位置 ,为乱序
void init()//初始化 链表
{
head = -1;
idx = 0;
}
void insert_head(int x) //将 x 插入到头节点
{
e[idx]= x; //储存 x 的值
ne[idx] = head; //让 x 的下一个 是 head 所指向的 数值
head = idx ; //让 head 不在指向 -1 而是指向 idx 头指针
idx++; //idx 下移一位 利于下次操作
}
void add(int f,int s) //把 s 插入到 f 点的后面
{
e[idx]= s;
// 存入 s 的数值 (不用管 idx 位于数组的什么地方,我们不通过下标来寻找数 而是通过链表)
ne[idx]= ne[f]; // 让 s 所在的节点代替 f 节点的指向
ne[f] = idx; // 让 s 指针指向 idx
idx++;
}
void Delete(int x) //删除 x 后面的 一个节点
{
ne [x] = ne[ne[x]];//让x指向 它所指向的节点 所指向的节点 也就是他的下下个
}
void solve()
{
char c;int n;int m;
cin>>c;
if(c=='H')
{
cin>>n;
insert_head(n);
}
else if(c=='I')
{
cin>>n;
cin>>m;
add(n-1,m);
}
else if(c=='D')
{
cin>>n;
if(n==0)head = ne[head];
Delete(n-1);
}
}
int main ()
{
int t;cin>>t;
init();
while(t--)
solve();
for (int i = head; i != -1; i = ne[i]) //如何遍历链表 先从head开始 一直到 -1 每次都指向下一个
cout << e[i] << ' ' ;
cout<<endl;
return 0;
}