你被给定了一组不同的整数。你需要将它们分成两个非空子集,使得每个元素恰好属于其中一个子集,且每个子集中所有元素的和相等。
有一个匿名提示告诉我们,上述问题不太可能在多项式时间内解决(或者类似的情况),所以我们决定改变它。现在,你可以决定其中一半的整数!
这是一个包含三个阶段的交互式问题。在第一阶段,你选择 $N$ 个不同的整数。在第二阶段,你会得到另外 $N$ 个整数,它们彼此不同,且与你在第一阶段选择的整数也不同。在第三阶段,你必须将这 $2N$ 个整数分成两个子集,使得它们的和相等。所有整数都在 $1$ 到 $10^9$ 之间(包含边界),并且保证它们的总和为偶数。
输入格式
这是一个交互式问题。请确保你已经阅读了我们 FAQ 中关于交互式问题的说明。
程序首先需要读取一行,包含一个整数 $T$,表示测试用例的数量。然后,必须处理 $T$ 个测试用例。
对于每个测试用例,程序必须首先读取一行,包含一个整数 $N$。然后,必须输出一行,包含 $N$ 个不同的整数 $A_1, A_2, \dots, A_N$。这些整数中的每一个都必须在 $1$ 到 $10^9$ 之间(包含边界)。之后,程序必须读取一行,包含另外 $N$ 个整数 $B_1, B_2, \dots, B_N$。最后,程序必须输出一行,包含 $1$ 到 $2N - 1$ 个整数,这些整数选自 $A_1, A_2, \dots, A_N, B_1, B_2, \dots, B_N$:它们被选为第一个子集的一部分。你没有输出的来自 $A$ 和 $B$ 的整数将被视为属于另一个子集。
如果还有下一个测试用例,它会立即开始。如果这是最后一个测试用例,裁判程序将不再期待任何输出,也不会向你的程序发送任何进一步的输入。此外,无论你的程序最终输出是否正确,所有测试用例总是会被处理。
说明:可以证明,给定此问题的限制,存在一个序列 $A_1, A_2, \dots, A_N$,使得对于任何序列 $B_1, B_2, \dots, B_N$,得到的 $2N$ 个整数集合都可以被分成两个和相等的子集。
如果裁判程序在任何时候收到格式错误或无效的行(例如输出的整数数量不符合预期、整数超出范围或一行中出现重复整数),裁判程序将打印一个数字 $-1$ 并且不会再打印任何输出。如果你的程序在收到 $-1$ 后继续等待裁判程序,你的程序将会超时,导致 Time Limit Exceeded 错误。请注意,你有责任让你的程序及时退出,以便接收 Wrong Answer 判决,而不是 Time Limit Exceeded 错误。通常情况下,如果超过内存限制或程序出现运行时错误,你将收到相应的判决。
数据范围
$1 \le T \le 100$。 $N = 100$。 $1 \le B_i \le 10^9$,对于所有 $i$。 $B_i \neq A_j$,对于所有 $i, j$。 $B_i \neq B_j$,对于所有 $i \neq j$。 对于每个测试用例,裁判程序会选择 $B_i$,使得所有 $2N$ 个整数的和为偶数。
样例
样例输入 1
2 3 10 4 9 3 10 8 12
样例输出 1
5 1 3 1 10 5 5 2 3 12 8
说明
在上面的样例交互中,解决方案正确处理了所有情况并会收到正确的判决。请注意,$N$ 的值不符合测试集的限制,仅用于简化示例。请注意,裁判程序本可以为第一个测试用例给出整数 $\{2, 7, 100\}$,这使得解决方案无法找到一个有效的划分为和相等的子集。