#include <stdio.h>
#include <stdlib.h>
int n,i,p,m,x,a[100010]={0};
typedef struct LNode{
struct LNode *pre;
int data;
struct LNode *next;
}LNode,*LinkList;
void InitialLNode(LinkList L){
L->pre=NULL;
L->data=1;
L->next=NULL;
}
struct LNode* Insert0(LinkList L,int data,int i){
LinkList index=L;
while(index->data!=i){
index=index->next;
}
LinkList NewLNode;
NewLNode=(LNode*)malloc(sizeof(LNode));
NewLNode->pre=index->pre;
if(index->pre!=NULL){
index->pre->next=NewLNode;
}
NewLNode->next=index;
NewLNode->data=data;
index->pre=NewLNode;
if(!NewLNode->pre){
return NewLNode;
}
return L;
}
struct LNode* Insert1(LinkList L,int data,int i){
LinkList index=L;
while(index->data!=i){
index=index->next;
}
LinkList NewLNode;
NewLNode=(LNode*)malloc(sizeof(LNode));
NewLNode->data=data;
NewLNode->pre=index;
NewLNode->next=index->next;
if(index->next!=NULL)NewLNode->next->pre=NewLNode;
index->next=NewLNode;
return L;
};
void PrintLinkList(LinkList L){
LinkList index=L;
if(a[index->data]==0){
printf("%d ",index->data);
}
while(index->next!=NULL){
index=index->next;
if(a[index->data]==0){
printf("%d ",index->data);
}
}
}
int main(){
LinkList L;
L=(LNode*)malloc(sizeof(LNode));
InitialLNode(L);
scanf("%d",&n);
for(int j=2;j<=n;j++){
scanf("%d%d",&i,&p);
if(p==0){
L=Insert0(L,j,i);
}
else{
Insert1(L,j,i);
}
}
scanf("%d",&m);
while(m--){
scanf("%d",&x);
a[x]=1;
}
PrintLinkList(L);
return 0;
}