这是一个交互式问题。这意味着你程序的输入将根据你程序的输出而改变。
Väinö 被选为标志性角色诗歌大赛(Iconic Character Poetry Contest, ICPC)的新任主席,这是一场汇聚了全国最优秀、最聪明人才的电视智力与诗歌对决。不幸的是,近年来 ICPC 的受欢迎程度呈爆炸式增长,Väinö 被大批希望展示自己才华的新申请者所包围。
该节目接受申请者的名额有限,Väinö 的任务是确保只有最优秀的申请者才能获得这些名额。他决定举办一场资格赛来决定谁能晋级。在锦标赛中,他每次会邀请两名申请者进行对决,以评估谁的诗歌(或称 runous)水平更高。他确信没有任意两名申请者的水平是相同的。水平具有传递性,也就是说,如果 $a$ 击败了 $b$,且 $b$ 击败了 $c$,那么 $a$ 也一定会击败 $c$。
然而,他的时间有限,他希望限制必须进行的比赛场数,以确定晋级的前几名申请者。你能帮他选择应该进行哪些比赛吗?
交互格式
交互开始时,首先读取两个整数 $N$ 和 $K$,分别代表申请者的总数和晋级的人数。已知 $1 \le N \le 15\,000$ 且 $1 \le K \le \min(N, 30)$。这 $N$ 名申请者从 $1$ 到 $N$ 进行编号。
随后,你最多可以进行 $12N + 1\,000$ 次格式为 ? a b 的询问,其中 $1 \le a, b \le N$ 且 $a \neq b$。这代表在申请者 $a$ 和 $b$ 之间进行一场比赛,交互器将回应 $a$ 或 $b$,表示哪位申请者赢得了比赛(即水平更高)。
请记得在每次询问后清空输出缓冲区(flush)。
cout.flush(); // C++
System.out.flush(); // Java
print(..., flush=True) # Python
如果你进行了超过 $12N + 1\,000$ 次询问,你的提交将获得 Wrong Answer(答案错误)的评测结果。
一旦你确定了水平最高的前 $K$ 名申请者,请以 ! x1 x2 x3 ... xK 的格式输出他们。这前 $K$ 名申请者可以按任意顺序输出。随后你的程序应当退出。
交互器是非适应性(non-adaptive)的,这意味着每位申请者的水平在交互开始前就已经确定,并且在交互过程中不会改变。
除了正确识别出前 $K$ 名申请者外,你的询问还必须证明你的答案是唯一可能的前 $K$ 名申请者集合——如果存在任何漏掉潜在人才的可能性,你将会承受 Väinö 的怒火!例如,在样例中如果仅仅输出 ! 5 3 4 将会获得 Wrong Answer,因为你的询问并没有证明 $\{5, 3, 4\}$ 确实是水平最高的前 3 名。
如果交互器收到任何无效输入,交互器将输出 -1 并立即终止。你的程序应当干净地退出以获得 Wrong Answer 评测结果,否则获得的评测结果可能是任意表示提交错误的非预期结果。
我们为你提供了一个用于本地测试的命令行工具。该工具的顶部有注释解释其使用方法。
样例
输入样例 1
6 3 3 1 5 3 5 4
输出样例 1
? 1 3 ? 1 2 ? 3 5 ? 3 6 ? 5 4 ? 3 4 ! 5 3 4