#include <iostream>
#include <vector>
#include <string>
using namespace std;
void solve() {
int n;
cin >> n;
vector<int> p(n + 1);
for (int i = 1; i <= n; i++) {
cin >> p[i];
}
string s;
cin >> s;
vector<int> ans(n + 1, 0);
vector<bool> visited(n + 1, false);
for (int i = 1; i <= n; i++) {
if (!visited[i]) {
vector<int> cycle;
int curr = i;
int black_count = 0;
while (!visited[curr]) {
visited[curr] = true;
cycle.push_back(curr);
if (s[curr - 1] == '0') {
black_count++;
}
curr = p[curr];
}
for (int node : cycle) {
ans[node] = black_count;
}
}
}
for (int i = 1; i <= n; i++) {
cout << ans[i] << (i == n ? "" : " ");
}
cout << "\n";
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int t;
cin >> t;
while (t--) {
solve();
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8c3RyaW5nPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnZvaWQgc29sdmUoKSB7CiAgICBpbnQgbjsKICAgIGNpbiA+PiBuOwogICAgCiAgICB2ZWN0b3I8aW50PiBwKG4gKyAxKTsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgewogICAgICAgIGNpbiA+PiBwW2ldOwogICAgfQogICAgCiAgICBzdHJpbmcgczsKICAgIGNpbiA+PiBzOwogICAgCiAgICB2ZWN0b3I8aW50PiBhbnMobiArIDEsIDApOwogICAgdmVjdG9yPGJvb2w+IHZpc2l0ZWQobiArIDEsIGZhbHNlKTsKICAgIAogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSB7CiAgICAgICAgaWYgKCF2aXNpdGVkW2ldKSB7CiAgICAgICAgICAgIHZlY3RvcjxpbnQ+IGN5Y2xlOwogICAgICAgICAgICBpbnQgY3VyciA9IGk7CiAgICAgICAgICAgIGludCBibGFja19jb3VudCA9IDA7CiAgICAgICAgICAgIAogICAgICAgICAgICB3aGlsZSAoIXZpc2l0ZWRbY3Vycl0pIHsKICAgICAgICAgICAgICAgIHZpc2l0ZWRbY3Vycl0gPSB0cnVlOwogICAgICAgICAgICAgICAgY3ljbGUucHVzaF9iYWNrKGN1cnIpOwogICAgICAgICAgICAgICAgaWYgKHNbY3VyciAtIDFdID09ICcwJykgewogICAgICAgICAgICAgICAgICAgIGJsYWNrX2NvdW50Kys7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBjdXJyID0gcFtjdXJyXTsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgZm9yIChpbnQgbm9kZSA6IGN5Y2xlKSB7CiAgICAgICAgICAgICAgICBhbnNbbm9kZV0gPSBibGFja19jb3VudDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIAogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSB7CiAgICAgICAgY291dCA8PCBhbnNbaV0gPDwgKGkgPT0gbiA/ICIiIDogIiAiKTsKICAgIH0KICAgIGNvdXQgPDwgIlxuIjsKfQoKaW50IG1haW4oKSB7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUoTlVMTCk7CiAgICAKICAgIGludCB0OwogICAgY2luID4+IHQ7CiAgICB3aGlsZSAodC0tKSB7CiAgICAgICAgc29sdmUoKTsKICAgIH0KICAgIAogICAgcmV0dXJuIDA7Cn0=