#include <iostream>
#include <string.h>
using namespace std;
struct node{
int id;
node *back=NULL,*front=NULL;
}nod[100005];
node *head=&nod[1];
void add(int num,int dir,int id){
node *find=&nod[id],*add=&nod[num];
if(dir) {
add->front=find;
add->back=find->back;
find->back=add;
find=find->back->back;
find->front=add;
return ;
}
else {
add->back=find;
add->front=find->front;
find=find->front;
find->back = add;
find=find->back->back;
find->front=add;
if(id==head->id)
head=add;
}
}
void dele(int del){
node *cut=&nod[del];
if(cut->id==head->id)
head=cut->back;
cut=cut->front;
cut->back=cut->back->back;
cut=cut->back;
cut->front=cut->front->front;
}
int main(){
int n,num,dir,m,del;
bool innode[100005];
memset(innode,false,sizeof(innode));
innode[1]=true;
cin>>n;
nod[1].back=&nod[1],nod[1].front=&nod[1],nod[1].id=1;
for(int i=2;i<=n;i++){
nod[i].id=i;
innode[i]=true;
cin>>num>>dir;
add(num,dir,i);
}
cin>>m;
for(int i=1;i<=m;i++){
cin>>del;
if(innode[i]){
innode[del]=false;
dele(del);
}
}
int end=head->id;
do
{
cout<<head->id<<" ";
head=head->back;
}while(end!=head->id);
cout<<endl;
system("pause");
return 0;
}