#include<bits/stdc++.h>
using namespace std;
bool vis[1000003];
list<int> stus;
list<int>::iterator pos[1000003];//用来存放每一项的迭代器 这样遍历链表的时间能从O(n)变成O(1)
int main(){
int n;
scanf("%d",&n);
stus.push_front(1);//插入1到头部
pos[1] = stus.begin();//放入迭代器的开始 相当于存入的位置在哪里
for(int i = 2;i <= n;i++){
int k,p;
scanf("%d %d",&k,&p);
if(p==0){//在左边
pos[i] = stus.insert(pos[k],i);//插入左边返回一个迭代器
}
else{
list<int>::iterator it = pos[k];//取出第k个元素迭代器的位置
it++;
pos[i] = stus.insert(it,i);
}
}
int m = 0;
scanf("%d",&m);
while(m--){
int x = 0;
scanf("%d",&x);
if(!vis[x]){
vis[x]=true;//标记他被删过了
stus.erase(pos[x]);//传入他的迭代器
}
}
for(list<int>::iterator it = stus.begin();it!=stus.end();it++){
printf("%d ",*it);
}
printf("\n");
return 0;
}