在本题中,当提到“随机选择”时,意味着从所有有效可能性中均匀随机选择,且独立于任何其他选择。
Code Jam 的参赛者们曾经帮助强大的 Goro 对一个整数数组进行排序。(你不需要阅读那道题目也能解决这一题。)现在,Goro 又需要你的帮助了。他有 $N$ 个盒子在桌子上排成一行,从左到右编号为 $1$ 到 $N$。每个盒子里恰好有一个球。球的编号也是 $1$ 到 $N$。Goro 希望对于所有的 $i$,球 $i$ 最终都在盒子 $i$ 中。也就是说,他希望球按排序后的顺序排列。遗憾的是,初始状态并非如此。
当 Goro 用他强有力的拳头撞击桌子时,球会弹到空中并落回盒子里。Goro 可以非常精确地操作,使得每个盒子里恰好落入一个球。球可能落入它原来所在的盒子,也可能落入不同的盒子。
更好的是,Goro 还有在每次撞击前为盒子分配颜色的能力。然后,他可以以某种方式撞击桌子,使得从颜色为 $c$ 的盒子中出来的球总是落入颜色为 $c$ 的盒子中。尽管这种准确性令人印象深刻,但 Goro 对此并没有更多的控制权。在每种颜色内部,球最终被随机分配到各个盒子中。
例如,假设球以 $1, 4, 3, 6, 5, 2$ 的顺序出现(如上图所示)。他可以选择——不一定是最优的——将第一个盒子设为红色,第二个和第六个盒子设为绿色,第三到第五个盒子设为蓝色。然后,在 Goro 撞击桌子后:
- 第一个盒子里的 $1$ 落回同一个盒子,因为那是唯一的红色盒子。
- 第二个和第六个盒子里的 $4$ 和 $2$ 以 $\frac{1}{2}$ 的概率保持原位,以 $\frac{1}{2}$ 的概率交换位置。
- 第三、第四和第五个盒子里的 $3, 6, 5$ 以 $\frac{1}{6}$ 的概率最终以以下顺序之一排列:
- $3, 6, 5$
- $3, 5, 6$
- $6, 3, 5$
- $6, 5, 3$
- $5, 3, 6$
- $5, 6, 3$
因此,例如,撞击后球的顺序为 $1, 2, 3, 5, 6, 4$ 的概率为 $\frac{1}{12}$。如果 Goro 得到了这个或其他未排序的结果,他将不得不为下一轮指定一组盒子颜色,依此类推,直到他最终得到排序后的 $1, 2, 3, 4, 5, 6$。在每次撞击前,Goro 可以以任何方式为盒子分配颜色,而无需考虑之前的分配。
你能帮助 Goro 实现一个更有效的策略来对球进行排序吗?保证球初始时处于随机的未排序状态。
输入格式
这是一个交互式问题。请确保你已阅读 FAQ 中关于交互式问题的部分。
程序首先应读取一行,包含三个整数 $T, N, K$:测试用例数量、每个测试用例的盒子数量,以及所有测试用例总共允许的撞击次数。然后,处理 $T$ 个测试用例。
每个测试用例开始时,裁判会发送一行包含 $N$ 个整数的内容,每个整数从 $1$ 到 $N$ 出现且仅出现一次,该列表是从所有未排序的列表中随机选择的。然后你必须与裁判进行一系列交互。每次交互的工作方式如下:
- 你发送一行包含 $N$ 个整数 $C_1, C_2, \dots, C_N$ 的内容,其中每个整数在 $1$ 到 $N$ 之间(含)。每个 $C_i$ 表示你为下一次撞击将盒子 $i$ 分配了颜色 $C_i$。你可以选择有多少种颜色以及它们如何编号,但你必须为每个盒子分配一种颜色。
- 裁判模拟题目中解释的撞击过程。如果这导致球处于排序状态:
- 如果这是所有测试用例中的第 $K$ 次交互,且这不是最后一个测试用例,裁判会发送一行包含整数 $-1$ 的内容,并不再输出任何内容。
- 否则,裁判会发送一行包含整数 $1$ 的内容,然后立即开始下一个测试用例(如果有的话)。如果这是最后一个测试用例,你的程序必须无错误地退出,且不再发送任何内容。
- 否则,球未排序,且:
- 如果这是所有测试用例中的第 $K$ 次交互,或者你提供了无效的行(例如,整数过少,或颜色编号超出范围),裁判会发送一行包含整数 $-1$ 的内容,并不再输出任何内容。
- 如果这不是你的第 $K$ 次交互,裁判会发送一行包含整数 $0$ 的内容,然后是另一行包含 $N$ 个整数的内容,每个整数从 $1$ 到 $N$ 出现且仅出现一次,且处于未排序状态,代表球的新顺序,即这些整数中的第 $i$ 个是落入盒子 $i$ 的球。然后你必须开始另一次交互。
通常情况下,如果超过内存限制或程序出现运行时错误,你将收到相应的判决。此外,如果你的程序在收到 $-1$ 后继续等待裁判,你的程序将超时,导致“时间限制超限”(Time Limit Exceeded)错误。请注意,你有责任让你的程序及时退出,以接收“答案错误”(Wrong Answer)判决,而不是“时间限制超限”错误。
请注意,裁判每次使用相同的随机源,因此在没有其他错误(如时间限制超限、内存限制超限)的情况下,提交完全相同的代码两次将产生相同的结果。
数据范围
时间限制:20 秒。 内存限制:1 GB。 $T = 1000$。 $N = 100$。
子任务
- 测试集 1(可见判决):$K = 16500$。
- 测试集 2(可见判决):$K = 12500$。
- 测试集 3(可见判决):$K = 11500$。
样例
输入格式 1
2 4 8 1 4 3 2 0 1 4 3 2 1 2 1 4 3 1
输出格式 1
1 2 3 2 1 2 3 2 4 4 4 4
说明
样例交互并不满足任何测试集的约束。它仅用于阐明输入和输出格式。