#include <cstdio>
#include <cstring>
#include <algorithm>
#define ll unsigned long long
#define base 2333
#define MOD 1000000007
#define write(n) n < 0 ? putchar('-'), rite(-n) : rite(n)
using namespace std;
inline int read() {
register int x = 0, b = 1;
register char c = getchar();
while (c < '0' || c > '9') {
if (c == '-') b = 0;
c = getchar();
}
while (c >= '0' && c <= '9') {
x = (x << 3) + (x << 1) + (c ^ '0');
c = getchar();
}
return b ? x : -x;
}
void rite(int n) {
if (n > 9) rite(n / 10);
putchar(n % 10 ^ '0');
}
int num, first[52], ne[102], to[102], sz[52], d[52], maxx, root[4];
ll ha[52];
inline void add(register const int &a, register const int &b) {
ne[++num] = first[a],
first[a] = num,
to[num] = b;
}
ll hash(int u, int father) {
ll res = 1001, buf[52];
int now = 0;
for (int i = first[u]; i; i = ne[i]) {
if (to[i] != father) {
buf[++now] = hash(to[i], u);
}
}
sort(buf + 1, buf + now + 1);
for (int i = 1; i <= now; ++i ) {
res = (res * base ^ buf[i]) % MOD;
}
return res;
}
void dfs(int x, int fa, const int &n) {
sz[x] = 1;
int res = 0;
for (int i = first[x]; i; i = ne[i]) {
if (to[i] != fa) {
dfs(to[i], x, n);
sz[x] += sz[to[i]];
res = max(res, sz[to[i]]);
}
}
res = max(res, n - sz[x]);
d[x] = res;
maxx = min(maxx, res);
}
int main() {
int m = read();
memset(ha, 0x7fffffff, sizeof(ha));
for (register int n, i = 1; i <= m; ++i) {
memset(first, 0, sizeof(first));
n = read();
int tot = num = 0;
for (register int x,j = 1; j <= n; ++j) {
x = read();
if (x) add(j, x), add(x, j);
}
maxx = 0x7fffffff/3;
dfs(1, 0, n);
for (int j = 1; j <= n; ++j) {
if (d[j] == maxx) {
root[++tot] = j;
}
}
for (int j = 1; j <= tot; ++j) {
ha[i] = min(ha[i], hash(root[j], 0));
}
for (int j = 1; j <= i; ++j) {
if (ha[i] == ha[j]) {
write(j);
putchar('\n');
break;
}
}
}
return 0;
}