#include<bits/stdc++.h>
using namespace std;
#define MAXSIZE 100
typedef int Status;
typedef struct{
int *Elem;
int length;
}Sqlist;
Status push(Sqlist &L){
L.Elem[0]=1;
++L.length;
}
Status Initlist(Sqlist &L){
L.Elem=new int[MAXSIZE];
if(!L.Elem) exit(0);
L.length=0;
return 1;
}
Status Locateelem(Sqlist L,int e){
for(int i=0;i<L.length;i++)
if(L.Elem[i]==e)return i+1;
return 0;
}
Status ListInsert(Sqlist &L,int i,int e){
if(i<1||i>L.length+1)return 0;
if(L.length==MAXSIZE)return 0;
for(int j=L.length-1;j>=i-1;j--)
L.Elem[j+1]=L.Elem[j];
L.Elem[i-1]=e;
++L.length;
return 1;
}
Status ListDelete(Sqlist &L,int i){
if(i<1||i>L.length)return 0;
for(int j=i;j<=L.length;j++)
L.Elem[j-1]=L.Elem[j];
--L.length;
return 1;
}
void put(Sqlist &L){
for(int i=0;i<L.length;i++){
cout<<L.Elem[i]<<" ";
}
}
int main(){
Sqlist La;
Initlist(La);
push(La);
int n,a,t;
cin>>n;
for(int i=2;i<=n;i++){
cin>>a>>t;
if(t==0)ListInsert(La,Locateelem(La,a),i);
else ListInsert(La,Locateelem(La,a)+1,i);
}
int m;
cin>>m;
for(int i=0;i<m;i++){
cin>>a;
if(Locateelem(La,a))ListDelete(La,Locateelem(La,a));
}
put(La);
}