#include <bits/stdc++.h>
using namespace std;
const int MAX = 1000001;
int n;
int p[MAX];
int ans[MAX][2];
vector<int> adj[MAX];
void dfs_up(int u) {
while(u != 0) {
ans[u][0] = 0;
ans[u][1] = 1;
for(auto v : adj[u]) {
ans[u][0] += ans[v][1];
ans[u][1] += min(ans[v][0], ans[v][1]);
}
u = p[u];
}
}
int main() {
#ifndef ONLINE_JUDGE
freopen("inp.txt", "r", stdin);
#endif
ios_base::sync_with_stdio(false);
int t;
cin >> t;
while(t--) {
cin >> n;
for(int i = 1; i <= n; ++i) {
adj[i].clear();
}
for(int i = 2; i <= n; ++i) {
cin >> p[i];
adj[p[i]].push_back(i);
dfs_up(i);
int animals = i > 3 ? max(2, min(ans[1][0], ans[1][1])) : 1;
cout << (animals + 1) << " ";
}
cout << "\n";
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgTUFYID0gMTAwMDAwMTsKCmludCBuOwppbnQgcFtNQVhdOwppbnQgYW5zW01BWF1bMl07CnZlY3RvcjxpbnQ+IGFkaltNQVhdOwoKdm9pZCBkZnNfdXAoaW50IHUpIHsKICB3aGlsZSh1ICE9IDApIHsKICAgIGFuc1t1XVswXSA9IDA7CiAgICBhbnNbdV1bMV0gPSAxOwogICAgZm9yKGF1dG8gdiA6IGFkalt1XSkgewogICAgICBhbnNbdV1bMF0gKz0gYW5zW3ZdWzFdOwogICAgICBhbnNbdV1bMV0gKz0gbWluKGFuc1t2XVswXSwgYW5zW3ZdWzFdKTsKICAgIH0KICAgIHUgPSBwW3VdOwogIH0KfQoKaW50IG1haW4oKSB7CiAgI2lmbmRlZiBPTkxJTkVfSlVER0UKICAgIGZyZW9wZW4oImlucC50eHQiLCAiciIsIHN0ZGluKTsKICAjZW5kaWYKICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICBpbnQgdDsKICBjaW4gPj4gdDsKICB3aGlsZSh0LS0pIHsKICAgIGNpbiA+PiBuOwogICAgZm9yKGludCBpID0gMTsgaSA8PSBuOyArK2kpIHsKICAgICAgYWRqW2ldLmNsZWFyKCk7CiAgICB9CiAgICBmb3IoaW50IGkgPSAyOyBpIDw9IG47ICsraSkgewogICAgICBjaW4gPj4gcFtpXTsKICAgICAgYWRqW3BbaV1dLnB1c2hfYmFjayhpKTsKICAgICAgZGZzX3VwKGkpOwogICAgICBpbnQgYW5pbWFscyA9IGkgPiAzID8gbWF4KDIsIG1pbihhbnNbMV1bMF0sIGFuc1sxXVsxXSkpIDogMTsKICAgICAgY291dCA8PCAoYW5pbWFscyArIDEpIDw8ICIgIjsKICAgIH0KICAgIGNvdXQgPDwgIlxuIjsKICB9CiAgcmV0dXJuIDA7Cn0=