#include <bits/stdc++.h>
using namespace std;
typedef int status;
typedef int ElemType;
typedef struct LNode {
ElemType data;
struct LNode *next;
} LNode, *LinkList;
int N;
int M;
void ListInsert1(LinkList &L, int i, ElemType e);
void ListInsert2(LinkList &L, int i, ElemType e);
void Delete(LinkList L, ElemType e);
int main()
{
int a,b,c;
scanf("%d",&N);
LinkList L ;
LinkList m = (LinkList)malloc(sizeof(LNode));
L->next = m;
m->next = NULL;
L->next->data = 1;
for(int i = 2; i <= N;i++)
{
scanf("%d %d",&a,&b);
if(b == 0)
{
ListInsert1(L,a,i);
}
else
{
ListInsert2(L,a,i);
}
}
scanf("%d",&M);
for(int i = 1;i <= M;i++)
{
scanf("%d",&c);
Delete(L,c);
}
LinkList p = L->next;
while(p)
{
if(p->data > 0)
{
printf("%d ",p->data);
}
p = p->next;
}
return 0;
}
void ListInsert1(LinkList &L, int i, ElemType e)
{
int j = 0;
LinkList p = L->next, t = L;
while (j != i - 1) {
j++;
p = p->next;
t = t->next;
}
LinkList m = (LinkList)malloc(sizeof(LNode));
m->data = e;
t->next = m;
m->next = p;
}
void ListInsert2(LinkList &L, int i, ElemType e)
{
int j = 0;
LinkList p = L->next, t = L;
while (j != i ) {
j++;
p = p->next;
t = t->next;
}
LinkList m = (LinkList)malloc(sizeof(LNode));
m->data = e;
t->next = m;
m->next = p;
}
void Delete(LinkList L, ElemType e)
{
LinkList p = L->next;
while (p != NULL) {
if (p->data == e) {
p->data = -1;
break;
}
p = p->next;
}
}