#include <iostream>
#include<list>
using namespace std;
const int maxN = 1e5 ;//这个常量的定义要写在main函数外,写在main函数里面会造成栈溢出异常
//每个人按编号顺序储存迭代器在数组里
list<int>::iterator pos[maxN];
//是否被修改数组,按编号顺序
bool erased[maxN];
//实际队列链表
list<int> queList;
//最大人数
int N;
int main() {
//第一个人入队
queList.push_front(1);
pos[1] = queList.begin();
cin >> N;
for (int i = 2; i <= N; i++)
{
int k, p;
cin >> k >> p;
if (p == 0)
{
pos[i] = queList.insert(pos[k], i); //第i个人站在k的左边
}
else
{
//insert是插入作为参数的迭代器的前面
//所以插入到后面的话,要先定义下一个迭代器
list<int>::iterator nextIter = next(pos[k]);
pos[i] = queList.insert(nextIter, i); //第i个人站在k的右边边
}
}
//删除人数
int M;
cin >> M;
for (int x,i = 1; i <= M; i++) {
cin >> x;
//第x人是否被删除过
if (!erased[x]) {
queList.erase(pos[x]);
}
erased[x] = true;
}
//遍历输出
for (int x : queList) {
cout << x << " ";
}
}