兄弟 Flim 和 Flam 正在表演一个他们称之为“心灵感应”的戏法。
起初,主持人 Discord 生成两个随机二进制字符串 $a$ 和 $b$。每个字符串包含 $n = 10^6$ 位,每一位等概率且独立地取 0 或 1。字符串 $a$ 给 Flim,字符串 $b$ 给 Flam。他们每个人只能看到自己的字符串,而不知道对方的字符串。
之后,每个兄弟在对方的字符串中选择 $k = 10^5$ 个不同的位置,而这些位置是他们所不知道的!
最后,Discord 从左到右查看字符串 $a$,并写下 Flam 所选位置上的数字。然后他从左到右查看字符串 $b$,并在前一行下方写下 Flim 所选位置上的数字。之后,观众统计有多少对数字(来自 $a$ 的数字与写在它下方的来自 $b$ 的数字)是相同的。为了“证明”心灵感应有效,超过三分之二的数字对必须相同,即至少要有 $66\,667$ 对相同。
请帮助 Flim 和 Flam 规划如何在仅了解自己字符串的情况下选择对方字符串中的位置,以便他们能够“证明”心灵感应有效。
考虑一个小例子:
为了简便,设 $n = 20$,$k = 5$。
设字符串 $a$ 为 00101011011110111001。
设字符串 $b$ 为 11000111101000011010。
Flim 看到字符串 $a$,并选择字符串 $b$ 中的位置 2, 3, 5, 7, 11。
Flam 看到字符串 $b$,并选择字符串 $a$ 中的位置 1, 4, 9, 16, 20。
Discord 写下 $a_1 = 0, a_4 = 0, a_9 = 0, a_{16} = 1, a_{20} = 1$。
并在它们下方写下 $b_2 = 1, b_3 = 0, b_5 = 0, b_7 = 1, b_{11} = 1$。
在五对数字中,除了第一对外($a_1 = 0$ 但 $b_2 = 1$),其余每对的数字都相同。
这意味着 Flim 和 Flam 达成了 4/5 的相等。
相等比例大于 2/3,所以兄弟俩“证明”了心灵感应有效!
交互
在本题中,你的程序在每个测试点上会被运行两次:第一次作为 Flim,第二次作为 Flam。评测程序扮演 Discord。每一行输入均以换行符结束。
第一轮
在第一轮中,程序扮演 Flim。第一行包含字符串 “Flim”。第二行包含两个空格分隔的整数 $n$ 和 $k$(在本题的所有测试中,$n = 10^6$,$k = 10^5$)。第三行包含 $n$ 个二进制数字(无空格):给 Flim 的字符串 $a$。
输出 $k$ 个空格分隔的整数 $1 \le p_1 < p_2 < \dots < p_k \le n$:在字符串 $b$ 中选择的位置。
第二轮
在第二轮中,程序扮演 Flam。第一行包含字符串 “Flam”。第二行包含两个空格分隔的整数 $n$ 和 $k$(同样,$n = 10^6$,$k = 10^5$)。第三行包含 $n$ 个二进制数字(无空格):给 Flam 的字符串 $b$。
输出 $k$ 个空格分隔的整数 $1 \le q_1 < q_2 < \dots < q_k \le n$:在字符串 $a$ 中选择的位置。
在第二轮结束后,评测程序会比较 $k$ 对数字:首先是 $a_{q_1}$ 与 $b_{p_1}$,然后是 $a_{q_2}$ 与 $b_{p_2}$,以此类推。如果相等对的数量超过 $\frac{2}{3}k$,则该测试点通过(OK)。否则,结果为 Wrong Answer。
本题包含一个可下载的样例和 50 个秘密测试点。所有二进制字符串均由伪随机数生成器预先生成:每个字符串的每一位均等概率且独立地取 0 或 1。
样例
以下展示了某程序在第一个测试点上的两次运行。为简洁起见,字符串和答案仅显示了部分。完整版本的样例可在 samples.zip 中查看。该样例中有 $66\,859$ 对相等的数字。
输入 1
Flim 1000000 100000 110111111110<...>11010111
输出 1
3 14 25 <...> 999979 999990
输入 2
Flam 1000000 100000 000000110100<...>10011111
输出 2
7 16 21 <...> 999977 999992