#CF1605D. 树的重标号
树的重标号
D. 树的重标号
每个测试点时间限制:2 秒
每个测试点内存限制:256 兆字节
Eikooc 和 Sushi 玩一个游戏。
游戏在一棵有 个节点的树上进行,节点编号为 到 。
(注:一棵 个节点的树是无向连通图,有 条边。)
他们轮流移动棋盘上的一个棋子。Eikooc 先手,她将棋子放在任意一个她选择的节点上。
然后 Sushi 移动棋子,接着 Eikooc 移动,再 Sushi 移动,如此交替。
在第一步之后的每一轮中,当前玩家必须将棋子从当前所在节点 移动到满足以下条件的节点 :
- 与 相邻;
- 之前没有被访问过;
- 。
这里 表示整数 和 的按位异或。
双方都采取最优策略。无法移动的玩家输。
下面的例子展示了游戏规则:
- 假设 Eikooc 将棋子放在节点 。Sushi 将棋子移到节点 , 未被访问且与 相邻,并且 。接着 Eikooc 将棋子移到节点 , 未被访问且与 相邻,并且 。Sushi 无法再移动,所以她输了。
- 假设 Eikooc 将棋子放在节点 。Sushi 将棋子移到节点 , 未被访问且与 相邻,并且 。Eikooc 无法将棋子移到节点 ,因为 。由于 Eikooc 无法移动,她输了。
在游戏开始前,Eikooc 偷偷地重新标记树的节点,以便对自己有利。
形式化地说,一个重标号是一个长度为 的排列 (包含 到 每个整数恰好一次),其中 表示节点 的新编号。
她希望最大化她在第一步中选择的节点数量,这些节点能保证她获胜。
帮助 Eikooc 找到任意一个重标号,使她达到这一目标。
输入
第一行包含一个整数 (),表示测试用例的数量。
每个测试用例描述如下:
- 第一行包含一个整数 (),表示树的节点数。
- 接下来 行,每行包含两个整数 和 (,),表示节点 和 之间有一条边。
保证所有测试用例的 之和不超过 。
输出
对于每个测试用例,输出任意一个合适的重标号——一个长度为 的排列,使得第一步中能保证 Eikooc 获胜的节点数最大。
如果有多个这样的重标号,输出任意一个即可。
示例
输入:
3
1
2
1 2
3
1 2
1 3
输出:
1
2 1
1 2 3
注意
- 在第一个测试用例中,Eikooc 只有一个选择。她选择这个节点后,Sushi 无法移动,Eikooc 获胜。
- 在第二个测试用例中,。因此,无论 Eikooc 选择哪个节点,Sushi 都无法移动,Eikooc 获胜。重标号 和 都是最优的。