#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;
}