#include <stdio.h>
#include<stdlib.h>
typedef struct Node{
int value;
struct Node *next;
}node;
//节点插入函数
void insert(node *head,int later,int prior){
while(head!=NULL){
if(prior==head->value){
node *tmp=(node*)malloc(sizeof(node));
tmp->value=later;
tmp->next=head->next;
head->next=tmp;
return;
}
head=head->next;
}
return;
}
//节点遍历函数
void display(node *head){
while(head!=NULL){
printf("%d ",head->value);
head=head->next;
}
return;
}
//节点删除函数
void delete(node *head,int num){
if(head->value==num){
node *tmp=(node*)malloc(sizeof(node));
tmp=head;
head=head->next;
free(tmp);
}
//前驱节点
/*
node *current=head;
node *previous=NULL;
while(current!=NULL&&(current->value!=num)){
previous=current;
current=current->next;
}
if(current!=NULL){
previous->next=current->next;
free(current);
}
*/
//后驱节点
node *head_t=head;
node *head_t1=head->next;
while(head_t1!=NULL){
if(head_t1->value==num){
head_t->next=head_t1->next;
free(head_t1);
break;
}
head_t=head_t->next;
head_t1=head_t->next;
}
}
//释放动态分配的内存
void free_node(node *head){
while(head!=NULL){
node *next=head->next;
free(head);
head=next;
}
return;
}
int main() {
int n,head_value,del;
scanf("%d %d",&n,&head_value);
//链表初始化
node *head=(node*)malloc(sizeof(node));
head->value=head_value;
head->next=NULL;
int later,prior;
while(n>1){
scanf("%d %d",&later,&prior);
insert(head,later,prior);
n--;
}
scanf("%d",&del);
delete(head,del);
display(head);
free_node(head);
return 0;
}