package main
import (
"io"
"os"
"strconv"
)
const LOG = 20
func add(bit []int, i, v int) {
for i < len(bit) {
bit[i] += v
i += i & -i
}
}
func sum(bit []int, i int) int {
res := 0
for i > 0 {
res += bit[i]
i -= i & -i
}
return res
}
func main() {
data, _ := io.ReadAll(os.Stdin)
p := 0
nextInt := func() int {
for p < len(data) && (data[p] < '0' || data[p] > '9') {
p++
}
x := 0
for p < len(data) && data[p] >= '0' && data[p] <= '9' {
x = x*10 + int(data[p]-'0')
p++
}
return x
}
t := nextInt()
out := make([]byte, 0, 1<<20)
for ; t > 0; t-- {
n := nextInt()
head := make([]int, n+1)
to := make([]int, n)
nxt := make([]int, n)
parent := make([]int, n+1)
depth := make([]int, n+1)
upFlat := make([]int, LOG*(n+1))
up := make([][]int, LOG)
for i := 0; i < LOG; i++ {
up[i] = upFlat[i*(n+1) : (i+1)*(n+1)]
}
for v := 2; v <= n; v++ {
par := nextInt()
parent[v] = par
depth[v] = depth[par] + 1
up[0][v] = par
for j := 1; j < LOG; j++ {
up[j][v] = up[j-1][up[j-1][v]]
}
e := v - 1
to[e] = v
nxt[e] = head[par]
head[par] = e
}
tin := make([]int, n+1)
tout := make([]int, n+1)
stackV := make([]int, n+1)
stackE := make([]int, n+1)
timer := 1
tin[1] = 1
top := 0
stackV[0] = 1
stackE[0] = head[1]
for top >= 0 {
v := stackV[top]
e := stackE[top]
if e != 0 {
stackE[top] = nxt[e]
u := to[e]
timer++
tin[u] = timer
top++
stackV[top] = u
stackE[top] = head[u]
} else {
tout[v] = timer
top--
}
}
bit := make([]int, n+2)
add(bit, tin[1], 1)
centroid := 1
ans := 1
m := 1
for x := 2; x <= n; x++ {
add(bit, tin[x], 1)
m++
var sAfter, nextC int
if tin[centroid] <= tin[x] && tout[x] <= tout[centroid] {
u := x
k := depth[x] - depth[centroid] - 1
b := 0
for k > 0 {
if k&1 == 1 {
u = up[b][u]
}
k >>= 1
b++
}
nextC = u
sAfter = sum(bit, tout[u]) - sum(bit, tin[u]-1)
} else {
nextC = parent[centroid]
sc := sum(bit, tout[centroid]) - sum(bit, tin[centroid]-1)
sAfter = m - sc
}
oldAns := ans
if oldAns == 0 {
ans = 1
} else {
L := ((m - 1) - oldAns) / 2
if sAfter == L+1 {
ans = oldAns - 1
} else {
ans = oldAns + 1
}
}
if sAfter > m/2 {
centroid = nextC
}
out = strconv.AppendInt(out, int64(ans), 10)
if x == n {
out = append(out, '\n')
} else {
out = append(out, ' ')
}
}
}
os.Stdout.Write(out)
}