#include <stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct d{
     int data;
     struct d*next;
}ListNode;
ListNode*BuySLTNode(int x);
void STLPrint(ListNode*head);
void SLTXinsert(ListNode**head,int x,int y);
void SLTdelet(ListNode**head,int x);
int main() {
    int input = 0;
    int s1,s2,s3;
    char array[20];
    ListNode*css = NULL;
    scanf("%d",&input);
     while(input--)
     {
          scanf("%s",array);
         if(strcmp(array,"insert")==0)
         {
            scanf("%d%d",&s1,&s2);
            SLTXinsert(&css,s1,s2);
         }
         else if(strcmp(array,"delete")==0)
         {
            scanf("%d",&s3);
              SLTdelet(&css,s3);
         }
     }
    STLPrint(css);
}
ListNode*BuySLTNode(int x)
{
   ListNode*newNode = (ListNode*)malloc(sizeof(ListNode));
   if(newNode==NULL)
   {
     perror("malloc");
     exit(-1);
   }
   newNode->data = x;
   newNode->next = NULL;
   return newNode;
}
void SLTXinsert(ListNode**head,int x,int y)
{
    ListNode*newNode = BuySLTNode(y);  //如果当前链表为空,则为头结点
    if(*head==NULL)
    {
        newNode->next = NULL;
        *head=  newNode;
        return ;
    }
   ListNode*cur  = *head;
   ListNode*prev = NULL;

   while(cur!=NULL&&cur->data!=x)
   {
       prev = cur;
       cur  = cur->next;
   }
  
    if(cur==NULL)
    {
        newNode->next = NULL;
        prev->next = newNode;
    }
    else{
         newNode->next = cur;
         if(prev==NULL)
         {
             *head=newNode;
         }
         else{

             prev->next = newNode;
         }

    }
}
void STLPrint(ListNode*head)
{
     if(head==NULL)
     {
        printf("NULL");
     }
     ListNode*cur = head;
     while(cur)
     {
        printf("%d ",cur->data);
        cur = cur->next;
     }

}

void SLTdelet(ListNode**head,int x)
{
    //如果要删除的节点是链表的头节点,它没有更新 *head 指向新的头节点。修复这个问题的方法是,在删除头节点时,将 *head 更新为指向下一个节点。
      ListNode*cur = *head;
      ListNode*prev = NULL;
      while(cur&&cur->data==x)
      {
         *head = cur->next;
         free(cur);
         return;
      }
    
     while(cur&&cur->data!=x)
     {
          prev=cur;
          cur = cur->next;
     }
   
   if(cur!=NULL)
   {
        prev->next  = cur->next;
        free(cur);
   }
}