思路:多源bfs。首先我们要弄清楚Sekai点是什么?其实就是度数为1的叶子节点,我们要找与Sekai点相距最近的最大距离Miku点,就只需要把所有Sekai点收集起来,做一个多源bfs,就可以得到Sekai点到其他Miku点的最短距离。然后统计其中的最大值及其出现次数,并且根据要求输出答案即可

代码:

import sys
from collections import deque

input = lambda: sys.stdin.readline().strip()

import math
inf = 10 ** 18

def I():
    return input()

def II():
    return int(input())

def MII():
    return map(int, input().split())

def LI():
    return input().split()

def LII():
    return list(map(int, input().split()))

def LFI():
    return list(map(float, input().split()))

fmax = lambda x, y: x if x > y else y
fmin = lambda x, y: x if x < y else y
isqrt = lambda x: int(math.sqrt(x))

'''

'''

def solve():
    n = II()
    g = [[] for _ in range(n + 1)]
    deg = [0] * (n + 1)
    dis = [0] * (n + 1)
    for _ in range(n - 1):
        u, v = MII()
        g[u].append(v)
        g[v].append(u)
        deg[u] += 1
        deg[v] += 1

    vis = [False] * (n + 1)
    q = deque([i for i in range(1, n + 1) if deg[i] == 1])
    for i in q:
        vis[i] = True
    while q:
        for _ in range(len(q)):
            u = q.popleft()
            for v in g[u]:
                if vis[v]:
                    continue
                vis[v] = True
                dis[v] = dis[u] + 1
                q.append(v)

    mx = max(dis[1:])
    ans = []
    for i in range(1, n + 1):
        if dis[i] == mx:
            ans.append(i)
    print(len(ans))
    print(*ans)

# t = 1
t = II()
for _ in range(t):
    solve()