using namespace std;
struct list1{
int val,l,r; //双向链表
}a[100005];
int main(){
a[0].r=1;
a[1].l=0;
a[1].r=-1;
int n,x,y,z;
cin>>n;
for(int i=0;i<=n;i++){ //赋初值 加一个head a[0]
a[i].val=i;
}
for(int i=2;i<=n;i++){ //插入
cin>>x>>y;
if(y==0){
a[i].l=a[x].l;
a[a[i].l].r=i;
a[i].r=x;
a[x].l=i;
}
if(y==1){
a[i].l=x;
a[i].r=a[x].r;
a[a[i].r].l=i;
a[x].r=i;
}
}
cin>>n;
for(int i=1;i<=n;i++){ //删除
cin>>z;
int p=0;
while(a[p].r!=-1){
if(a[p].r==z){
a[p].r=a[z].r;
break;
}
p=a[p].r;
}
}
int p=0;
while(a[p].r!=-1){ //遍历
cout<<a[p].r<<" ";
p=a[p].r;
}
return 0;
}