#include <bits/stdc++.h>
using namespace std;
vector<int> v[250001];
int a, ans[250001], n, i, q, kol;
bool pole[250001];
void dfs(int nom) {
  int i;
  kol++;
  pole[nom] = true;
  for (i = 0; i < v[nom].size(); i++)
    if (!pole[v[nom][i]]) dfs(v[nom][i]);
  ans[nom] = kol;
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cin >> q;
  while (q--) {
    cin >> n;
    for (i = 1; i <= n; i++) {
      v[i].clear();
      pole[i] = false;
    }
    for (i = 1; i <= n; i++) {
      cin >> a;
      v[i].push_back(a);
    }
    for (i = 1; i <= n; i++)
      if (!pole[i]) {
        kol = 0;
        dfs(i);
      }
    for (i = 1; i <= n - 1; i++) cout << ans[i] << " ";
    cout << ans[n] << '\n';
  }
  return 0;
}
