#include<iostream>
#include<string>
using namespace std;
class MyList{
public:
struct Link{//建立一个链表
int val;
struct Link* next;
Link(int _val):val(_val),next(nullptr){}
};
MyList(){
dummy = new Link(0);//建立一个虚结点,便于操作头节点。
size = 0;//计算链表中节点的个数。
}
void insert(int n,int val)
{
Link* newnode = new Link(val);
Link* h = dummy;
while(h->next)
{
if(h->next->val==n)//链表非空,且插入的位置不在头尾两个部分。
{
Link* tmp = h->next;
h->next = newnode;
newnode->next = tmp;
size++;
return;
}
h = h->next;
}
h->next = newnode;//当链表为空时,直接在虚节点下一个建立头节点,当找不到 n 时,直接在结尾插入
size++;
return;
}
void deleteh(int vall)
{
Link* tmp = dummy;
while(tmp->next)
{
if(tmp->next->val == vall)
{
Link* p = tmp->next;
tmp->next = tmp->next->next;
size--;//删掉一个,就个数减1
free(p);//释放内存,防止内存泄漏。虽然不释放内存答案也对,但c++一定要有释放内存的好习惯
return;
}
tmp = tmp->next;
}
return;
}
void print(){
Link* no = dummy;
if(size == 0)cout<<"NULL";
else
{
while(no->next)
{
cout << no->next->val <<" ";
no = no->next;
}
}
return;
}
private:int size;
Link* dummy;
};
int main()
{
MyList k;
int n1;
cin >> n1;
string s;
while(n1--)
{
cin >> s;
if(s=="insert")
{
int n2,val;
cin >> n2 >> val;
k.insert(n2, val);
}
else{
int m;
cin >> m;
k.deleteh(m);
}
}
k.print();
return 0;
}