给定一棵有 n 个节点的满二叉树*,根节点为 1。对于每个节点 u(1≤u≤n),我们定义函数 fu:R+→R+ 如下:
- 若 u 是叶子节点†,则 fu(x)=x;
- 否则,记 u 的左子节点为 lu,右子节点为 ru,则
fu(x)=(flu(x))fru(x)。
对于两个节点 u 和 v,我们称 u≺v 当且仅当以下之一成立:
- 当 x→∞ 时,fu(x)<fv(x);
- u<v,且当 x→∞ 时,fu(x)=fv(x)‡。
可以证明,对于任意两个不同的节点 u 和 v,要么 u≺v,要么 v≺u 成立。
你需要按照 ≺ 的顺序对节点排序。形式化地说,你需要找到一个长度为 n 的排列§ p,使得对于每个 1≤i<n,有 pi≺pi+1。
输入
每个测试点包含多个测试用例。第一行包含一个整数 t(1≤t≤104),表示测试用例的数量。接下来是每个测试用例的描述。
每个测试用例的第一行包含一个整数 n(1≤n≤4⋅105,n 为奇数),表示满二叉树的节点数。
接下来 n 行,第 i 行包含两个整数 li 和 ri(0≤li,ri≤n),表示节点 i 的左子节点和右子节点。如果 i 是叶子节点,则 li=ri=0。保证输入形成一棵以 1 为根的满二叉树。
保证所有测试用例的 n 之和不超过 4⋅105。
输出
对于每个测试用例,输出一行 n 个整数 p1,p2,…,pn(1≤pi≤n,所有 pi 互不相同),即你找到的排列。需要保证对于每个 1≤i<n,有 pi≺pi+1。
样例输入
4
3
2 3
0 0
0 0
5
2 3
4 5
0 0
0 0
0 0
9
2 3
4 5
0 0
0 0
6 7
8 9
0 0
0 0
0 0
1
0 0
样例输出
2 3 1
3 4 5 2 1
3 4 7 8 9 6 5 2 1
1
注释
在第一个测试用例中,f2(x)=f3(x)=x,f1(x)=(f2(x))f3(x)=xx。当 x→∞ 时,显然 f2(x)=f3(x)<f1(x)。因此 2≺3≺1。
在第二个测试用例中,f3(x)=f4(x)=f5(x)=x,f2(x)=(f4(x))f5(x)=xx,f1(x)=(f2(x))f3(x)=xx2。显然当 x→∞ 时,x<xx,所以 f2(x)<f1(x)。类似地,f3(x)=f4(x)=f5(x)<f2(x)<f1(x)。因此 3≺4≺5≺2≺1。
*满二叉树:每个节点要么有 0 个孩子,要么有 2 个孩子的有根树。
†叶子节点:没有孩子的节点。
‡这里,“当 x→∞ 时 fu(x)<fv(x)”等价于:存在正数 N,使得对所有 x>N,fu(x)<fv(x) 成立。fu(x)=fv(x) 当 x→∞ 的定义类似。
§长度为 n 的排列:由 n 个互不相同的 1 到 n 的整数按任意顺序组成的数组。例如,[2,3,1,5,4] 是一个排列,但 [1,2,2] 不是(2 出现两次),[1,3,4] 也不是(n=3 但数组中出现了 4)。