#include <bits/stdc++.h>
using namespace std;
struct ListNode{
int val;
ListNode* next;
ListNode() : val(0), next(nullptr){};
ListNode(int x) : val(x), next(nullptr){};
};
int main(){
int nodeNum = 0;
int headVal = 0;
while(cin >> nodeNum >> headVal){
/*//法一:用数组模拟链表
vector<int> array;
array.push_back(headVal);
for(int i = 1; i < nodeNum; i++){
int num = 0, posNum = 0;
cin >> num >> posNum; //输入要插入的数和它要插入哪个数字后面
auto iter = find(array.begin(), array.end(), posNum); //找到要插入数字后面的那个位置
if(iter == array.end()){
array.push_back(num); //结尾
}
else{
array.insert(iter + 1, num); //iter + 1
}
}
//移除数字
int removeNum = 0;
cin >> removeNum;
auto it = find(array.begin(), array.end(), removeNum); //找到要移除的数字的位置
array.erase(it); //移除
for(int i = 0; i < array.size(); i++){
cout << array[i] << " ";//输出
}
cout << endl;*/
//法二:构建链表
ListNode* head = new ListNode(headVal); //头结点
for(int i = 1; i < nodeNum; i++){
int preNodeNum = 0, curNodeNum = 0;
cin >> curNodeNum >> preNodeNum;
ListNode* curNode = new ListNode(curNodeNum); //添加这个结点
ListNode* cur = head;
while(cur != nullptr && cur->val != preNodeNum){ //找到前序结点
cur = cur->next;
}
//插入节点
curNode->next = cur->next;
cur->next = curNode;
}
//移除数字
int removeNum = 0;
cin >> removeNum;
ListNode* cur = head;
/*while(cur != nullptr){
if(cur->val != removeNum) { //不输出removeNum,其他都输出
cout << cur->val << " ";
}
cur = cur->next;
}
cout << endl;*/
while(cur->next != nullptr && cur->next->val != removeNum){ //找到要移除的结点
cur = cur->next;
}
//移除节点
ListNode* tmp = cur->next;
cur->next = cur->next->next;
delete tmp;
ListNode* output = head;
while(output != nullptr){
cout << output->val << " ";//输出
output = output->next;
}
cout << endl;
}
return 0;
}