在策划了这起窃取蒙特卡洛伯爵(Count Monte Carlo)皇冠珠宝的最精密抢劫案后,你遇到了路径上的最后一道障碍:一个锁上的保险箱。然而,你已经为这一刻进行了训练,并磨练了你的开锁技能。
保险箱有 $N$ 个拨盘,每个拨盘都可以设置为 $1$ 到 $2N$ 之间的任意整数。蒙特卡洛伯爵为每个拨盘配置了一个正确的秘密值。为了尝试打开保险箱,你需要将每个拨盘设置为你选择的值,然后转动保险箱门把手。如果每个拨盘都设置成了其正确的秘密值,你将不会感到任何阻力,门会立即打开。
当然,通过随机猜测所有正确的秘密值来打开保险箱几乎是不可能成功的。然而,作为一名专家级开锁匠,即使你的猜测是错误的,当你尝试打开门时,你也会感到一些阻力,你可以利用这些信息来帮助破译正确的秘密值。如果一个拨盘的秘密值为 $h$,而当你尝试开门时该拨盘被设置为 $d$,那么该拨盘在转动门把手时会产生 $|h - d|$ 的阻力。你可以感受到所有拨盘中的最大阻力。(注意,如果该值为 $0$,则说明你已成功打开保险箱并完成了抢劫!)
不幸的是,安保团队已经察觉到了你的存在,他们正在向你的位置靠近。你每秒钟可以尝试打开一次保险箱,但他们将在 $4N$ 秒后到达!你能在被抓住之前完成抢劫吗?
交互
这是一个交互式问题。交互开始时,从标准输入读取一个整数 $N$ ($1 \le N \le 500$),表示保险箱上的拨盘数量。你的程序最多可以进行 $4N$ 次尝试来打开保险箱门,每次尝试都需要为每个拨盘指定一个尝试值。每次尝试后,你都会被告知从门把手上感受到的阻力。
进行一次尝试时,打印一行包含 $N$ 个空格分隔的整数 $d_1, d_2, \dots, d_N$ ($1 \le d_i \le 2N$),即你为每个拨盘提出的值。然后从标准输入读取一个整数,表示你从门把手上感受到的阻力,即 $\max_i |h_i - d_i|$,其中 $h_i$ 是拨盘 $i$ 的(对你未知的)秘密值。如果阻力为 $0$,则说明你已经打开了保险箱,你的程序应当终止。否则,如果还有剩余尝试次数,你可以再次尝试。
如果你用尽了尝试次数,你的程序应当正常退出(尽管由于未能及时破解保险箱以逃脱守卫,你将被判为错误)。
每个拨盘的秘密值由蒙特卡洛伯爵在抢劫前预先配置,并且不会随着你的破解尝试而改变。
说明
请记住,在打印每一行后刷新输出流,并在交互完成后正常退出。请确保你严格遵守上述交互协议,关于在输出的哪一行打印什么信息:例如,如果协议要求你在单行上打印一系列空格分隔的整数,评测系统将不会接受将每个整数分行打印。
如果评测系统收到无效或意外的输入,它将打印 $-1$ 并立即退出。你的程序必须检测到此错误报告并正常退出,以便获得“答案错误”(Wrong Answer)判决。如果你的程序阻塞等待评测系统的进一步交互,或者试图将 $-1$ 解释为阻力值,你可能会收到其他拒绝判决(例如“超出时间限制”或“运行时错误”),而不是“答案错误”。
你已获得一个用于本地测试的命令行工具。该工具的顶部有解释其用法的注释。
样例
样例交互 1
| 交互内容 | 方向 | 说明 |
|---|---|---|
3 |
输入 | 读取拨盘数量 $N=3$ |
1 1 1 |
输出 | 第一次尝试 |
5 |
输入 | 感受到的最大阻力为 $5$ |
3 4 5 |
输出 | 第二次尝试 |
1 |
输入 | 感受到的最大阻力为 $1$ |
4 5 6 |
输出 | 第三次尝试 |
0 |
输入 | 成功打开保险箱 |