#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;
}