圣诞节到了!当大多数工作场所都在进行秘密圣诞老人(Secret Santa)礼物交换时,你的工作场所正在酝酿一个更邪恶的计划:揭开圣诞老人的秘密。
圣诞老人为地球上的每个人都准备了一份“淘气或乖巧”名单。由于其内容非常敏感,该名单是用北波兰语(North-Polish)编写的,这是一种拥有 $N$ 个字母的神秘语言。为了进一步保密,圣诞老人用一种代换密码对这份名单进行了加密:一个数字 $1, 2, \dots, N$ 的置换 $H$,它将每个北波兰语字母 $i$ 映射到一个不同的字母 $H(i)$。在这种密码中,没有两个字母会映射到同一个目标字母——形式上,如果 $i \neq j$,则 $H(i) \neq H(j)$——否则圣诞老人将无法解密他的名单!(圣诞老人可以选择将某些字母映射到它们自身,即 $H(i) = i$,只是为了更狡猾一点。)
幸运的是,圣诞老人的服务器代码写得很糟糕,并且暴露在公共互联网上。你和你的同事希望入侵圣诞老人的服务器,解密他的名单,并确认你们都是淘气的!(黑客总是淘气的。)
该服务器的构建是为了让圣诞老人可以随时随地快速查看他的名单。在用户连接到服务器后,它会提示用户输入 $N$ 个整数 $H(1), H(2), \dots, H(N)$ 来编码置换 $H$,验证该列表是否正确,然后解密圣诞老人的秘密名单。经过数月的调查,你发现了一个侧信道计时漏洞。假设你输入了一个置换 $Q$。如果 $H = Q$,服务器会立即授予访问权限。否则,考虑一个具有 $N$ 个顶点的图,并从每个顶点 $i$ 到顶点 $H(Q(i))$ 添加一条边。你已经发现,服务器复杂的身份验证算法响应“访问被拒绝”(Access Denied)错误消息所花费的秒数,正好等于所得图中连通分量的数量。
例如,假设 $N = 4$,且密码置换 $H$ 如下:
| $i$ | 1 | 2 | 3 | 4 |
|---|---|---|---|---|
| $H(i)$ | 2 | 3 | 1 | 4 |
如果你尝试用输入 $4\ 3\ 2\ 1$ 登录服务器,由于该置换与 $H$ 不匹配,且上述图有两个连通分量(一个包含边 $1 \to 4 \to 2 \to 1$ 的循环,另一个仅包含自环 $3 \to 3$),服务器将在延迟 2 秒后响应“访问被拒绝”错误消息。
注意,如果你尝试多次使用不同的输入 $Q$ 登录服务器,它每次都会根据同一个存储的 $H$ 对 $Q$ 进行身份验证。它不会因为你的输入而以任何方式改变 $H$。
如果圣诞老人的服务器受到未经授权的请求轰炸,他会注意到。你估计你最多只能进行 $1\,510$ 次登录尝试,否则会引起过多的怀疑。你能找到一种确定密码置换的有效策略吗?
交互
这是一个交互式问题。交互开始时,从标准输入读取一个整数 $N$ ($1 \le N \le 220$),即北波兰语中的字母数量。评测机不是自适应的:隐藏的置换 $H$ 在此时被选定,并且在交互的其余部分中不会改变。
要尝试登录服务器,请打印一行包含 $N$ 个空格分隔的整数 $Q(1), \dots, Q(N)$,其中 $Q$ 是 $\{1, 2, \dots, N\}$ 的一个置换。然后从标准输入读取一个整数,即服务器响应你的输入所花费的时间(以秒为单位)。
如果此延迟为 0,则说明你已成功找到密码置换 $H$,你的程序应该终止。如果不是,此延迟是根据上述过程构建的图中连通分量的数量。
你最多可以尝试登录 $1\,510$ 次。如果你的尝试次数用尽,你的程序应该干净地退出(尽管它会被判定为错误,因为它未能解密圣诞老人的“淘气或乖巧”名单)。
说明
请记住在打印每一行后刷新输出流,并在交互完成后干净地退出。请确保你严格遵守上述交互协议,关于在输出的哪一行打印什么信息:例如,如果协议要求你在单行上打印一个空格分隔的整数列表,评测机将不会接受每个整数单独占一行。
如果评测机收到无效或意外的输入,它将打印 $-1$ 并立即退出。你的程序必须检测到这一点并干净地退出,以便获得“答案错误”(Wrong Answer)判决。如果你的程序阻塞等待评测机的进一步交互,或者试图将 $-1$ 解释为分量数量,你可能会收到不同的拒绝判决(例如“超出时间限制”或“运行时错误”),而不是“答案错误”。
你已经获得了一个用于本地测试的命令行工具。该工具在顶部有解释其用法的注释。
样例
样例 1
3 1 2 3 1 2 1 3 2 3 1 2 0