STL list:
#include<iostream>
#include<list>
using namespace std;
const int maxN=1e5+10;
list<int>::iterator pos[maxN];
bool erased[maxN];
list<int>quelist;
int main()
{
int N;
cin>>N;
quelist.push_front(1);
pos[1]=quelist.begin();
for(int i=2;i<=N;i++)
{
int k,p;
cin>>k>>p;
if(p==0)
{
pos[i]=quelist.insert(pos[k],i);
}
else
{
auto it=next(pos[k]);
pos[i]=quelist.insert(it,i);
}
}
int M;
cin>>M;
for(int i=1;i<=M;i++)
{
int x;
cin>>x;
if(!erased[x])
{
quelist.erase(pos[x]);
}
erased[x]=true;
}
for(auto t=quelist.begin();t!=quelist.end();t++)
{
cout<<*t<<" ";
}
return 0;
}