去年,一个研究联盟的分布式数据库系统出现了一些故障,导致部分数据丢失。你不需要阅读或理解那个问题来解决这道题!
该联盟认为分布式系统过于复杂,因此他们将 $B$ 位重要信息存储在单台机器的单个数组中。作为额外的安全层,他们增加了获取信息的难度;用户必须查询 $1$ 到 $B$ 之间的某个位位置,然后接收该位作为响应。
不幸的是,这台超现代机器会受到随机量子涨落的影响!具体来说,在发送第 $1$ 次、第 $11$ 次、第 $21$ 次、第 $31$ 次……等查询之后,但在给出响应之前,量子涨落会以相等的概率导致以下四种效应之一:
- $25\%$ 的时间,数组被取反:每个 $0$ 变为 $1$,反之亦然。
- $25\%$ 的时间,数组被反转:第一位与最后一位交换,第二位与倒数第二位交换,依此类推。
- $25\%$ 的时间,数组同时发生上述两种变化(取反和反转)。(注意,它们发生的顺序无关紧要。)
- $25\%$ 的时间,数组不发生任何变化。
此外,没有任何迹象表明每次量子涨落产生了什么影响。该联盟现在很担心,并雇佣你找回其珍贵的数据,无论它处于什么形式!你能找到整个数组,使得你的答案在你给出答案的那一刻是准确的吗?回答问题不计入查询次数,因此,如果你在第 $30$ 次查询后回答,数组将与你在第 $21$ 次到第 $30$ 次查询后的状态相同。
输入格式
这是一个交互式问题。请确保你已阅读 FAQ 中关于交互式问题的部分。
最初,你的程序应读取一行,包含两个整数 $T$ 和 $B$:测试用例的数量和数组中的位数。注意,$B$ 对于每个测试用例都是相同的。
然后,你需要处理 $T$ 个测试用例。在每个测试用例中,裁判从一个预定的 $B$ 位数组开始;注意,该数组在不同的测试用例中可能不同,且不一定是随机选择的。
然后,你可以进行最多 $150$ 次以下形式的查询:
- 你的程序输出一行,包含一个 $1$ 到 $B$ 之间的整数 $P$,表示你希望查看数组中的哪个位置。
- 如果你目前进行的查询次数除以 $10$ 的余数为 $1$,裁判会从上述四种可能性(取反、反转、取反+反转或无变化)中均匀随机且独立地选择一种,并相应地改变存储的数组。(注意,这会在你进行的第一次查询时发生。)
- 裁判返回一行,包含一个字符 $0$ 或 $1$,即它当前在位置 $P$ 存储的值,或者如果你提供了格式错误的行(例如无效位置),则返回 $N$。
在你进行了任意多次上述查询后,你必须进行最后一次以下形式的交换:
- 你的程序输出一行,包含一个由 $B$ 个字符组成的字符串,每个字符都是 $0$ 或 $1$,表示当前存储在数组中的位(这不一定与最初存在的位匹配!)。
- 裁判返回一行,包含一个字母:如果你的答案正确,则返回大写字母 $Y$;如果答案不正确(或者你提供了格式错误的行),则返回大写字母 $N$。如果你收到 $Y$,你应该开始下一个测试用例,或者如果没有更多测试用例,则停止发送输入。
在裁判向你的输入流发送 $N$ 后,它将不会发送任何其他输出。如果你的程序在收到 $N$ 后继续等待裁判,你的程序将超时,导致 Time Limit Exceeded 错误。请注意,你有责任让你的程序及时退出以接收 Wrong Answer 判决,而不是 Time Limit Exceeded 错误。通常情况下,如果超过内存限制或程序出现运行时错误,你将收到相应的判决。
数据范围
时间限制:每个测试集 40 秒。 内存限制:1GB。 $1 \le T \le 100$。
测试集 1 (可见判决)
$B = 10$。
测试集 2 (可见判决)
$B = 20$。
测试集 3 (隐藏判决)
$B = 100$。
样例
以下交互对应测试集 1。
t, b = readline_int_list() // 读取 100 到 t,10 到 b。 // 裁判以该测试用例的预定数组开始: // 0001101111。(注意:实际的测试集 1 不一定使用此数组。) printline 1 to stdout // 我们询问位置 1。 flush stdout // 由于这是我们的第 1 次查询,且 1 mod 10 为 1,裁判秘密且随机地选择上述四种量子涨落效应之一。 // 它恰好选择了取反 + 反转,所以现在存储的值是 0000100111。 r = readline_chr() // 读取 0。 printline 6 to stdout // 我们询问位置 6。 flush stdout // 由于这是我们的第 2 次查询,且 2 mod 10 为 2,裁判不选择量子涨落效应。 r = readline_chr() // 读取 0。 ... // 我们在此示例中省略了第三到第十次查询。 ... printline 1 to stdout // 我们决定再次询问位置 1。 flush stdout // 由于这是我们的第 11 次查询,且 11 mod 10 为 1,裁判秘密且随机地选择一个量子涨落效应, // 恰好得到反转,所以现在存储的值是 1110010000。 r = readline_chr() // 读取 1。 printline 1110110000 to stdout // 我们尝试回答。为什么?!?! flush stdout ok = readline_chr() // 读取 N -- 我们犯了一个错误! exit // 退出以避免歧义的 TLE 错误