#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=1e5+10;
int p[maxn],nxt[maxn],vis[maxn];
int main(){
int n;
scanf("%d",&n);
int k,pp;
p[1]=0; nxt[0]=1;
for(int i=2;i<=n;i++){
scanf("%d%d",&k,&pp);
if(pp==0){
nxt[p[k]]=i;
p[i]=p[k]; nxt[i]=k; p[k]=i;
}
else{
p[nxt[k]]=i;
nxt[i]=nxt[k];
p[i]=k;
nxt[k]=i;
}
}
int m,x;
scanf("%d",&m);
for(int i=1;i<=m;i++){
scanf("%d",&x);
if(vis[x]) continue;
vis[x]=true;
nxt[p[x]]=nxt[x]; p[nxt[x]]=p[x];
}
for(int i=nxt[0];i;i=nxt[i]){
cout<<i<<' ';
}
cout<<endl;
return 0;
}
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=1e5+10;
int p[maxn],nxt[maxn],vis[maxn];
int main(){
int n;
scanf("%d",&n);
int k,pp;
p[1]=0; nxt[0]=1;
for(int i=2;i<=n;i++){
scanf("%d%d",&k,&pp);
if(pp==0){
nxt[p[k]]=i;
p[i]=p[k]; nxt[i]=k; p[k]=i;
}
else{
p[nxt[k]]=i;
nxt[i]=nxt[k];
p[i]=k;
nxt[k]=i;
}
}
int m,x;
scanf("%d",&m);
for(int i=1;i<=m;i++){
scanf("%d",&x);
if(vis[x]) continue;
vis[x]=true;
nxt[p[x]]=nxt[x]; p[nxt[x]]=p[x];
}
for(int i=nxt[0];i;i=nxt[i]){
cout<<i<<' ';
}
cout<<endl;
return 0;
}