#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
typedef struct Node{
int x;
struct Node* next;
}Node;
Node *creat_header_Node() {
Node* header = (Node*)malloc(sizeof(Node));
Node* first = (Node*)malloc(sizeof(Node));
if (header == NULL || first == NULL) {
return;
}
first->x = 1;
header->x = -1;
header->next = first;
first->next = NULL;
return header;
}
//从左边排头插
Node* Head_Create(Node* header,int aim,int i) {
if (header == NULL) {
return;
}
Node* prev = header;
Node* current = prev->next;
while (current != NULL) {
if (current->x == aim) {
Node* newdata = (Node*)malloc(sizeof(Node));
newdata->x = i;
newdata->next = current;
prev->next = newdata;
return header;
}
else {
prev = current;
current = prev->next;
}
}
}
//从右边排尾插
Node* Tail_Create(Node* header,int aim,int i) {
Node* current = header->next;
Node* tail = current->next;
if (current == NULL) {
return;
}
while (current != NULL) {
if (current->x == aim) {
Node* newdata = (Node*)malloc(sizeof(Node));
newdata->x = i;
if (tail == NULL) {
newdata->next = NULL;
}
else {
newdata->next = tail;
}
current->next = newdata;
return header;
}
current = tail;
tail = current->next;
}
}
Node* delete_Node(Node*header,int val) {
Node* prev = header->next;
Node* current = prev->next;
while (current != NULL) {
if (current->x == val) {
prev->next = current->next;
free(current);
return header;
}
else if(current == NULL) {
return header;
}
else {
prev = current;
current = prev->next;
}
}
}
int main() {
int n;
scanf("%d", &n);
int x;
int y;
Node* header = creat_header_Node();
for (int i = 2; i < n + 1; i++) {
scanf("%d %d", &x, &y);
getchar();
if (y == 0) {
Head_Create(header, x, i);
}
if (y == 1) {
Tail_Create(header, x, i);
}
}
int number;
scanf("%d", &number);
getchar();
for (int i = 0; i < number ; i++) {
scanf("%d", &n);
getchar();
delete_Node(header, n);
}
Node* current = header->next;
while (current != NULL) {
printf("%d ", current->x);
current = current->next;
}
}