← Home
package main

import (
	"bufio"
	"fmt"
	"os"
)

func main() {
	in := bufio.NewReader(os.Stdin)
	out := bufio.NewWriter(os.Stdout)
	defer out.Flush()

	var t int
	fmt.Fscan(in, &t)
	for i := 0; i < t; i++ {
		solve(in, out)
	}
}

func solve(in *bufio.Reader, out *bufio.Writer) {
	var n int
	fmt.Fscan(in, &n)
	adj := make([][]int, n+1)
	for i := 0; i < n-1; i++ {
		var u, v int
		fmt.Fscan(in, &u, &v)
		adj[u] = append(adj[u], v)
		adj[v] = append(adj[v], u)
	}

	up := make([][15]int, n+1)
	depth := make([]int, n+1)

	var dfs func(int, int, int)
	dfs = func(u, p, d int) {
		up[u][0] = p
		depth[u] = d
		for i := 1; i < 15; i++ {
			up[u][i] = up[up[u][i-1]][i-1]
		}
		for _, v := range adj[u] {
			if v != p {
				dfs(v, u, d+1)
			}
		}
	}
	dfs(1, 1, 0)

	lca := func(u, v int) int {
		if depth[u] < depth[v] {
			u, v = v, u
		}
		diff := depth[u] - depth[v]
		for i := 0; i < 15; i++ {
			if (diff & (1 << i)) != 0 {
				u = up[u][i]
			}
		}
		if u == v {
			return u
		}
		for i := 14; i >= 0; i-- {
			if up[u][i] != up[v][i] {
				u = up[u][i]
				v = up[v][i]
			}
		}
		return up[u][0]
	}

	dist := func(u, v int) int {
		if u == -1 || v == -1 {
			return 0
		}
		return depth[u] + depth[v] - 2*depth[lca(u, v)]
	}

	maxDepth := 0
	nodesByDepth := make([][]int, n+1)
	for i := 1; i <= n; i++ {
		if depth[i] > maxDepth {
			maxDepth = depth[i]
		}
		nodesByDepth[depth[i]] = append(nodesByDepth[depth[i]], i)
	}

	ans := make([]int, n+1)
	for i := 1; i <= n; i++ {
		ans[i] = maxDepth
	}

	u, v := -1, -1
	diam := 0

	for k := maxDepth - 1; k >= 0; k-- {
		for _, z := range nodesByDepth[k+1] {
			if u == -1 {
				u = z
				v = z
				diam = 0
			} else {
				d1 := dist(z, u)
				d2 := dist(z, v)
				if d1 > diam && d1 >= d2 {
					diam = d1
					v = z
				} else if d2 > diam {
					diam = d2
					u = z
				}
			}
		}
		r := (diam + 1) / 2
		xMax := k - r
		if xMax >= 1 {
			if xMax > n {
				xMax = n
			}
			if k < ans[xMax] {
				ans[xMax] = k
			}
		}
	}

	for i := n - 1; i >= 1; i-- {
		if ans[i+1] < ans[i] {
			ans[i] = ans[i+1]
		}
	}

	for i := 1; i <= n; i++ {
		if i > 1 {
			fmt.Fprint(out, " ")
		}
		fmt.Fprint(out, ans[i])
	}
	fmt.Fprintln(out)
}