#include <bits/stdc++.h>
using namespace std;
int dx[] = {1, 0, -1, 0, 1, 1, -1, -1};
int dy[] = {0, 1, 0, -1, 1, -1, 1, -1};
template <class T, class V>
int min(T a, V b) {
  return min((int)a, (int)b);
}
template <class T, class V>
int max(T a, V b) {
  return max((int)a, (int)b);
}
bool isPrime(long long n, long long p) {
  if (n < 2) return 0;
  for (long long i = 2; i * i <= n; i++) {
    if (i > p) break;
    if (n % i == 0) return 0;
  }
  return 1;
}
void faster() {
  if (0) {
    freopen(
        "taskA"
        ".in",
        "r", stdin);
    freopen(
        "taskA"
        ".out",
        "w", stdout);
  }
  if (1) {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
  }
}
const long long INF = 1e18;
const int MAXN = (int)2e5 + 123;
const int MOD = (int)1e9 + 7;
const long double PI = acos(-1);
const long double EPS = 3E-16;
namespace MATH_CAL {
const int mod = MOD;
inline long long add(long long a, long long b) {
  return a + b >= mod ? a + b - mod : a + b;
}
inline long long sub(long long a, long long b) {
  return a - b < 0 ? a - b + mod : a - b;
}
inline long long mul(long long a, long long b) {
  return (long long)a * b % mod;
}
inline void Add(long long &a, long long b) { (a += b) >= mod ? a -= mod : 0; }
inline void Sub(long long &a, long long b) { (a -= b) < 0 ? a += mod : 0; }
inline long long qpow(long long x, long long n) {
  long long r = 1;
  for (; n; n /= 2, x = mul(x, x))
    if (n & 1) r = mul(r, x);
  return r;
}
inline long long mod_inv(long long x) { return qpow(x, mod - 2); }
inline long long gcd(long long a, long long b) {
  while (b) {
    a %= b;
    swap(a, b);
  }
  return a;
}
}  // namespace MATH_CAL
using namespace MATH_CAL;
int p[MAXN];
int sz[MAXN];
int root(int v) {
  if (p[v] != v) return p[v] = root(p[v]);
  return v;
}
void unit(int a, int b) {
  a = root(a);
  b = root(b);
  if (a != b) {
    p[b] = a;
    sz[a] += sz[b];
  }
}
void make(int a) {
  p[a] = a;
  sz[a] = 1;
}
void solve() {
  int n;
  cin >> n;
  for (int i = 1; i <= n; i++) {
    make(i);
  }
  for (int i = 1; i <= n; i++) {
    int t;
    cin >> t;
    unit(i, t);
  }
  for (int i = 1; i <= n; i++) {
    cout << sz[root(i)] << ' ';
  }
  cout << endl;
}
int main() {
  faster();
  int t = 1;
  cin >> t;
  while (t--) {
    solve();
  }
  return 0;
}
