1292: 博博又弈弈

Memory Limit:128 MB Time Limit:1.000 S
Judge Style:Text Compare Creator:
Submit:28 Solved:8

Description

​ 这一天Alice和Bob又在玩博弈游戏,游戏是这样的,有一颗n个节点的树,树上的每一个节点都有一个点权值,alice先进行游戏,然后bob在进行,以此循环往复。第一次行动时alice可以随意挑选一个节点将它占领,然后下一个行动的人只能选择一个还没有被占领的节点,满足这个节点和上一个被占领的节点相邻,记上一个被占领的节点为last,当前占领的节点为node,同时还需要满足$val [ node ] $^$ val [ last ] <= min(val[node], val[last])$ ,$val[node]$代表node节点的点权值。当一方游戏时,不存在可以操作的节点那么这个人就输了。

​ 现在我们需要帮助alice确定她第一步放在哪个节点一定可以获得胜利(假设alice和bob所采取的都是对于自己最优的决策)。

​ 注:我校NWUOJ的C++编译器没有std::__lg()函数,如需使用,请手写该函数。

Input

​ 第一行输入一个正整数t,代表t次询问。

​ 每个询问的第一行输入一个整数 $n(1\leq n \leq 2e5)$,表示树的节点个数。

​ 每个询问的第二行输入 $n$ 个整数 $val[i] (0 <= val[i] <= 1e9)$。

​ 每个询问的第三行到第 $n + 1$ 行输入 $n - 1$ 个整数对 , 每个整数对$x, y(1 \le x, y \le n)$,代表节点x和节点y之间存在一条无向边,保证给出的图一定是一颗树,没有重边和自环。

​ 输入保证 $\sum n\le2\times10^5$。

Output

​ 对于每个询问第一行输出一个整数num$(0 \le num \le n)$

​ 接下来一行输出num个整数$ node[i] $ $(0 \le i < num)$,从小到大,表示alice初始将节点放在$node[i] $$(0 \le i < num)$ 这些节点可以获得胜利

Sample Input Copy

3
1
1
2
1 2
1 2
3
1 2 3
1 2
1 3

Sample Output Copy

1
1
2
1 2
3
1 2 3