#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int T;
cin >> T;
while (T--) {
int n;
cin >> n;
vector<int> a(n + 1);
vector<long long> cost(n + 1);
vector<int> indeg(n + 1, 0);
// Read graph
for (int i = 1; i <= n; i++) {
cin >> a[i];
indeg[a[i]]++;
}
// Read costs
for (int i = 1; i <= n; i++)
cin >> cost[i];
queue<int> q;
vector<int> ans;
// Put all indegree-0 nodes into queue
for (int i = 1; i <= n; i++) {
if (indeg[i] == 0)
q.push(i);
}
// Kahn's Algorithm
while (!q.empty()) {
int u = q.front();
q.pop();
ans.push_back(u);
int v = a[u];
indeg[v]--;
if (indeg[v] == 0)
q.push(v);
}
// Visit remaining cycles
vector<int> vis(n + 1, 0);
for (int i = 1; i <= n; i++) {
// Already removed or already processed
if (indeg[i] == 0 || vis[i])
continue;
vector<int> cycle;
int cur = i;
// Walk around the cycle
while (!vis[cur]) {
vis[cur] = 1;
cycle.push_back(cur);
cur = a[cur];
}
// Find minimum-cost node
int pos = 0;
for (int j = 1; j < cycle.size(); j++) {
if (cost[cycle[j]] < cost[cycle[pos]])
pos = j;
}
// Print after minimum-cost node
for (int j = pos + 1; j < cycle.size(); j++)
ans.push_back(cycle[j]);
for (int j = 0; j <= pos; j++)
ans.push_back(cycle[j]);
}
for (int x : ans)
cout << x << " ";
cout << "\n";
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbWFpbigpIHsKICAgIGlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUobnVsbHB0cik7CgogICAgaW50IFQ7CiAgICBjaW4gPj4gVDsKCiAgICB3aGlsZSAoVC0tKSB7CgogICAgICAgIGludCBuOwogICAgICAgIGNpbiA+PiBuOwoKICAgICAgICB2ZWN0b3I8aW50PiBhKG4gKyAxKTsKICAgICAgICB2ZWN0b3I8bG9uZyBsb25nPiBjb3N0KG4gKyAxKTsKICAgICAgICB2ZWN0b3I8aW50PiBpbmRlZyhuICsgMSwgMCk7CgogICAgICAgIC8vIFJlYWQgZ3JhcGgKICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIHsKICAgICAgICAgICAgY2luID4+IGFbaV07CiAgICAgICAgICAgIGluZGVnW2FbaV1dKys7CiAgICAgICAgfQoKICAgICAgICAvLyBSZWFkIGNvc3RzCiAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKQogICAgICAgICAgICBjaW4gPj4gY29zdFtpXTsKCiAgICAgICAgcXVldWU8aW50PiBxOwogICAgICAgIHZlY3RvcjxpbnQ+IGFuczsKCiAgICAgICAgLy8gUHV0IGFsbCBpbmRlZ3JlZS0wIG5vZGVzIGludG8gcXVldWUKICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIHsKICAgICAgICAgICAgaWYgKGluZGVnW2ldID09IDApCiAgICAgICAgICAgICAgICBxLnB1c2goaSk7CiAgICAgICAgfQoKICAgICAgICAvLyBLYWhuJ3MgQWxnb3JpdGhtCiAgICAgICAgd2hpbGUgKCFxLmVtcHR5KCkpIHsKCiAgICAgICAgICAgIGludCB1ID0gcS5mcm9udCgpOwogICAgICAgICAgICBxLnBvcCgpOwoKICAgICAgICAgICAgYW5zLnB1c2hfYmFjayh1KTsKCiAgICAgICAgICAgIGludCB2ID0gYVt1XTsKCiAgICAgICAgICAgIGluZGVnW3ZdLS07CgogICAgICAgICAgICBpZiAoaW5kZWdbdl0gPT0gMCkKICAgICAgICAgICAgICAgIHEucHVzaCh2KTsKICAgICAgICB9CgogICAgICAgIC8vIFZpc2l0IHJlbWFpbmluZyBjeWNsZXMKICAgICAgICB2ZWN0b3I8aW50PiB2aXMobiArIDEsIDApOwoKICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIHsKCiAgICAgICAgICAgIC8vIEFscmVhZHkgcmVtb3ZlZCBvciBhbHJlYWR5IHByb2Nlc3NlZAogICAgICAgICAgICBpZiAoaW5kZWdbaV0gPT0gMCB8fCB2aXNbaV0pCiAgICAgICAgICAgICAgICBjb250aW51ZTsKCiAgICAgICAgICAgIHZlY3RvcjxpbnQ+IGN5Y2xlOwoKICAgICAgICAgICAgaW50IGN1ciA9IGk7CgogICAgICAgICAgICAvLyBXYWxrIGFyb3VuZCB0aGUgY3ljbGUKICAgICAgICAgICAgd2hpbGUgKCF2aXNbY3VyXSkgewogICAgICAgICAgICAgICAgdmlzW2N1cl0gPSAxOwogICAgICAgICAgICAgICAgY3ljbGUucHVzaF9iYWNrKGN1cik7CiAgICAgICAgICAgICAgICBjdXIgPSBhW2N1cl07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIEZpbmQgbWluaW11bS1jb3N0IG5vZGUKICAgICAgICAgICAgaW50IHBvcyA9IDA7CgogICAgICAgICAgICBmb3IgKGludCBqID0gMTsgaiA8IGN5Y2xlLnNpemUoKTsgaisrKSB7CiAgICAgICAgICAgICAgICBpZiAoY29zdFtjeWNsZVtqXV0gPCBjb3N0W2N5Y2xlW3Bvc11dKQogICAgICAgICAgICAgICAgICAgIHBvcyA9IGo7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIFByaW50IGFmdGVyIG1pbmltdW0tY29zdCBub2RlCiAgICAgICAgICAgIGZvciAoaW50IGogPSBwb3MgKyAxOyBqIDwgY3ljbGUuc2l6ZSgpOyBqKyspCiAgICAgICAgICAgICAgICBhbnMucHVzaF9iYWNrKGN5Y2xlW2pdKTsKCiAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDw9IHBvczsgaisrKQogICAgICAgICAgICAgICAgYW5zLnB1c2hfYmFjayhjeWNsZVtqXSk7CiAgICAgICAgfQoKICAgICAgICBmb3IgKGludCB4IDogYW5zKQogICAgICAgICAgICBjb3V0IDw8IHggPDwgIiAiOwoKICAgICAgICBjb3V0IDw8ICJcbiI7CiAgICB9CgogICAgcmV0dXJuIDA7Cn0=
OAozCjIgMyAyCjYgNiAxCjgKMiAxIDQgMyA2IDUgOCA3CjEgMiAxIDIgMiAxIDIgMQo1CjIgMSAxIDEgMQo5IDggMSAxIDEKMgoyIDEKMTAwMDAwMDAwMCA5OTk5OTk5OTkKNwoyIDMgMiA2IDQgNCAzCjEgMiAzIDQgNSA2IDcKNQozIDQgNCAxIDMKMyA0IDUgNiA3CjMKMiAxIDEKMSAyIDIKNAoyIDEgNCAxCjEgMSAxIDEK
8
3
2 3 2
6 6 1
8
2 1 4 3 6 5 8 7
1 2 1 2 2 1 2 1
5
2 1 1 1 1
9 8 1 1 1
2
2 1
1000000000 999999999
7
2 3 2 6 4 4 3
1 2 3 4 5 6 7
5
3 4 4 1 3
3 4 5 6 7
3
2 1 1
1 2 2
4
2 1 4 1
1 1 1 1