#include <iostream>
#include <list>
using namespace std;
bool b[100005];
list<int>::iterator ar[100005];
int main() {
list<int> l;
l.push_back(1);
ar[1]=l.begin();
int n,x,op,m;
cin>>n;
for (int i=2;i<=n;i++){
cin>>x>>op;
if (*ar[x]==x){
if (op) {
l.insert(++ar[x],i);
ar[i]=ar[x];
ar[x]--;
}
else {
ar[i]=ar[x];
l.insert(ar[x],i);
ar[x]++;
}
continue;
}
for (auto it=l.begin();it!=l.end();++it){
ar[*it]=it;
if (*it==x){
if (op) {
ar[x]=it;
l.insert(++it,i);
ar[i]=it;
}
else {
ar[i]=it;
l.insert(it,i);
ar[x]=++it;
}
break;
}
}
}
cin>>m;
for (int i=1;i<=m;i++) {
cin>>x;
b[x]=true;
}
for (auto it=l.begin();it!=l.end();++it){
if (!b[*it]) printf("%d ",*it);
}
return 0;
}
本地运行输出和下载下来的测试点一样。