#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
void bfs(int start, int n, const vector<vector<int>>& adj, vector<bool>& visited) {
queue<int> q;
q.push(start);
visited[start] = true;
int node = q.front();
q.pop();
for (int neighbor : adj[node]) {
if (!visited[neighbor]) {
visited[neighbor] = true;
q.push(neighbor);
}
}
}
}
int main() {
int n;
cin >> n;
vector<vector<int>> adj(n + 1);
// Reading the edges
while (true) {
int p;
cin >> p;
if (p == 0) break;
int q;
while (true) {
cin >> q;
if (q == 0) break;
adj[p].push_back(q);
}
}
int k;
cin >> k;
vector<int> startVertices(k);
for (int i = 0; i < k; ++i) {
cin >> startVertices[i];
}
// For each starting vertex, perform BFS and print unreachable vertices
for (int i = 0; i < k; ++i) {
int start = startVertices[i];
vector<bool> visited(n + 1, false);
bfs(start, n, adj, visited);
vector<int> unreachable;
for (int j = 1; j <= n; ++j) {
if (!visited[j]) {
unreachable.push_back(j);
}
}
if (unreachable
.empty()) { cout << "0" << endl;
} else {
for (int j = 0; j < unreachable.size(); ++j) {
cout << unreachable[j];
if (j != unreachable.size() - 1) cout << " ";
}
cout << endl;
}
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8cXVldWU+CiNpbmNsdWRlIDxhbGdvcml0aG0+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp2b2lkIGJmcyhpbnQgc3RhcnQsIGludCBuLCBjb25zdCB2ZWN0b3I8dmVjdG9yPGludD4+JiBhZGosIHZlY3Rvcjxib29sPiYgdmlzaXRlZCkgewogICAgcXVldWU8aW50PiBxOwogICAgcS5wdXNoKHN0YXJ0KTsKICAgIHZpc2l0ZWRbc3RhcnRdID0gdHJ1ZTsKCiAgICB3aGlsZSAoIXEuZW1wdHkoKSkgewogICAgICAgIGludCBub2RlID0gcS5mcm9udCgpOwogICAgICAgIHEucG9wKCk7CiAgICAgICAgCiAgICAgICAgZm9yIChpbnQgbmVpZ2hib3IgOiBhZGpbbm9kZV0pIHsKICAgICAgICAgICAgaWYgKCF2aXNpdGVkW25laWdoYm9yXSkgewogICAgICAgICAgICAgICAgdmlzaXRlZFtuZWlnaGJvcl0gPSB0cnVlOwogICAgICAgICAgICAgICAgcS5wdXNoKG5laWdoYm9yKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQoKaW50IG1haW4oKSB7CiAgICBpbnQgbjsKICAgIGNpbiA+PiBuOwogICAgCiAgICB2ZWN0b3I8dmVjdG9yPGludD4+IGFkaihuICsgMSk7CiAgICAKICAgIC8vIFJlYWRpbmcgdGhlIGVkZ2VzCiAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgIGludCBwOwogICAgICAgIGNpbiA+PiBwOwogICAgICAgIGlmIChwID09IDApIGJyZWFrOwogICAgICAgIAogICAgICAgIGludCBxOwogICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICAgIGNpbiA+PiBxOwogICAgICAgICAgICBpZiAocSA9PSAwKSBicmVhazsKICAgICAgICAgICAgYWRqW3BdLnB1c2hfYmFjayhxKTsKICAgICAgICB9CiAgICB9CgogICAgaW50IGs7CiAgICBjaW4gPj4gazsKICAgIAogICAgdmVjdG9yPGludD4gc3RhcnRWZXJ0aWNlcyhrKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgazsgKytpKSB7CiAgICAgICAgY2luID4+IHN0YXJ0VmVydGljZXNbaV07CiAgICB9CgogICAgLy8gRm9yIGVhY2ggc3RhcnRpbmcgdmVydGV4LCBwZXJmb3JtIEJGUyBhbmQgcHJpbnQgdW5yZWFjaGFibGUgdmVydGljZXMKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgazsgKytpKSB7CiAgICAgICAgaW50IHN0YXJ0ID0gc3RhcnRWZXJ0aWNlc1tpXTsKICAgICAgICB2ZWN0b3I8Ym9vbD4gdmlzaXRlZChuICsgMSwgZmFsc2UpOwogICAgICAgIAogICAgICAgIGJmcyhzdGFydCwgbiwgYWRqLCB2aXNpdGVkKTsKICAgICAgICAKICAgICAgICB2ZWN0b3I8aW50PiB1bnJlYWNoYWJsZTsKICAgICAgICBmb3IgKGludCBqID0gMTsgaiA8PSBuOyArK2opIHsKICAgICAgICAgICAgaWYgKCF2aXNpdGVkW2pdKSB7CiAgICAgICAgICAgICAgICB1bnJlYWNoYWJsZS5wdXNoX2JhY2soaik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYgKHVucmVhY2hhYmxlLmVtcHR5KCkpIHsKICAgICAgICAgICAgY291dCA8PCAiMCIgPDwgZW5kbDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHVucmVhY2hhYmxlLnNpemUoKTsgKytqKSB7CiAgICAgICAgICAgICAgICBjb3V0IDw8IHVucmVhY2hhYmxlW2pdOwogICAgICAgICAgICAgICAgaWYgKGogIT0gdW5yZWFjaGFibGUuc2l6ZSgpIC0gMSkgY291dCA8PCAiICI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY291dCA8PCBlbmRsOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gMDsKfQo=
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
void bfs(int start, int n, const vector<vector<int>>& adj, vector<bool>& visited) {
queue<int> q;
q.push(start);
visited[start] = true;
while (!q.empty()) {
int node = q.front();
q.pop();
for (int neighbor : adj[node]) {
if (!visited[neighbor]) {
visited[neighbor] = true;
q.push(neighbor);
}
}
}
}
int main() {
int n;
cin >> n;
vector<vector<int>> adj(n + 1);
// Reading the edges
while (true) {
int p;
cin >> p;
if (p == 0) break;
int q;
while (true) {
cin >> q;
if (q == 0) break;
adj[p].push_back(q);
}
}
int k;
cin >> k;
vector<int> startVertices(k);
for (int i = 0; i < k; ++i) {
cin >> startVertices[i];
}
// For each starting vertex, perform BFS and print unreachable vertices
for (int i = 0; i < k; ++i) {
int start = startVertices[i];
vector<bool> visited(n + 1, false);
bfs(start, n, adj, visited);
vector<int> unreachable;
for (int j = 1; j <= n; ++j) {
if (!visited[j]) {
unreachable.push_back(j);
}
}
if (unreachable.empty()) {
cout << "0" << endl;
} else {
for (int j = 0; j < unreachable.size(); ++j) {
cout << unreachable[j];
if (j != unreachable.size() - 1) cout << " ";
}
cout << endl;
}
}
return 0;
}