一个研究联盟三年来一直在寻找最好的数据库,但他们仍然面临问题。该数据库将值存储为保存 8 位二进制字符串的记录。不幸的是,他们设置记录值的函数实现有缺陷。
数据库中的每条记录都是一个 8 位二进制字符串。二进制字符串的位从左到右索引为 0 到 7。当收到将特定记录设置为新值 $V$ 的指令时,数据库不会将值设置为 $V$,而是执行以下操作:
- 选择一个整数 $r$($0 \le r \le 7$),令 $W$ 为 $V$ 向右循环移动 $r$ 位后的结果。也就是说,$W$ 的第 $((i + r) \pmod 8)$ 位是 $V$ 的第 $i$ 位。
- 将记录的当前值 $X$ 替换为 $X \text{ XOR } W$。也就是说,如果 $X$ 和 $W$ 的第 $i$ 位不同,则新值的第 $i$ 位为 1。
- 最后,向用户返回新值中 1 的个数。
幸运的是,无论初始值是什么,或者数据库选择了什么旋转值,总能在不超过 300 次操作内将记录的值重置为全 0。请实现一个程序与数据库进行交互以完成此任务。
输入格式
这是一个交互式问题。请确保你已阅读 FAQ 中关于交互式问题的部分。
首先,你的程序应读取一行,包含一个整数 $T$,即测试用例的数量。然后,处理 $T$ 个测试用例。
在每个测试用例开始时,数据库中的记录被设置为一个非 00000000 的值。在每个测试用例中,你的程序必须处理最多 300 次交换。
第 $i$ 次交换开始时,你输出一行,包含一个 8 位二进制字符串,作为上述操作的值 $V$。然后,评测程序执行描述的操作,并向你发送一行,包含一个整数 $N_i$,表示更新后记录中等于 1 的位数。
- 如果 $N_i = 0$,意味着你已成功,必须开始下一个测试用例,或者如果这是最后一个用例,则结束程序。
- 如果 $N_i = -1$,意味着这是该测试用例的第 300 次交换,但记录从未达到全 0 的值,因此测试失败。后续测试用例将不再处理。
- 如果 $1 \le N_i \le 8$,意味着更新后的记录值有 $N_i$ 个 1,你可以继续进行下一次交换,尝试使其仅包含 0。
当且仅当你在所有测试用例中都成功将记录值设置为 00000000 时,你的解决方案才被认为是正确的。
如果评测程序在任何时刻收到格式错误或无效的行,评测程序将打印单个数字 $-1$ 并且不会打印任何进一步的输出。如果你收到 $-1$,你必须正确结束程序且不超过时间和内存限制,以获得错误判定。否则,你将收到关于资源超限或终止条件不正确的判定。
数据范围
$1 \le T \le 100$ $-1 \le N_i \le 8$(对于所有 $i$)
子任务
测试集 1(可见判定)
记录的初始值从所有非 00000000 的 8 位二进制字符串中均匀随机选择。
每个旋转值都是均匀随机选择的,且独立于之前的所有选择和交互。
测试集 2(可见判定)
评测程序是对抗性的。这意味着,除其他事项外,只要与所有交互一致,评测程序可以更改初始值或旋转值。保证初始值永远不会是 00000000。
样例
样例交互
| 评测程序 | 你的程序 |
|---|---|
| 1 | |
00110011 |
|
| 3 | |
00011001 |
|
| 0 |
说明
样例交互中,记录初始值为 10000000。
评测程序选择 $r = 5$,将你给出的值旋转得到 10011001,然后执行 10011001 XOR 10000000 得到 00011001,这是记录的新值。
00011001 有 3 个 1。
评测程序选择 $r = 0$,这使得你的输入不旋转。由于它与记录的当前值一致,这导致记录变为 00000000。
评测程序通知你记录中没有 1,因此该用例完成。