#CF2038G. 猜测一个字符

猜测一个字符

当前没有测试数据。

G. 猜测一个字符
每次测试的时间限制:2 秒
每次测试的内存限制:512 兆字节

这是一个交互式问题。你必须在打印每行之后立即使用刷新操作。例如,在 C++C++ 中应使用函数 fflush(stdout)fflush(stdout)cout.flush()cout.flush(),在 JavaJavaKotlinKotlin 中应使用 System.out.flush()System.out.flush(),在 PythonPython 中应使用 sys.stdout.flush()sys.stdout.flush()

评测系统有一个由字符 00 和/或 11 组成的字符串 ss。这个字符串的长度为 nn

你可以提出如下查询:

1 t

意思是:“ttss 中作为连续子串出现了多少次?” 这里,tt 应是一个由 00 和/或 11 组成的字符串;其长度应至少为 11,至多为 nn。例如,如果字符串 ss111011111011,而字符串 tt1111,则查询的响应是 33

你需要通过不超过 33 次查询,猜测出字符串 ss 中的至少一个字符。注意,给出答案不算一次查询。

在每个测试点以及每个测试用例中,字符串 ss 都是事先固定好的。


交互
一开始,评测程序发送一个整数 tt1t10001 \le t \le 1000)—— 测试用例的数量。

在每个测试用例开始时,评测程序发送一个整数 nn2n502 \le n \le 50)—— 字符串的长度。

之后,你的程序可以向评测程序提交查询,方法如下(打印一行后不要忘记刷新输出):

1 t

表示询问“ttss 中作为连续子串出现了多少次?”

对于每个查询,评测程序会在一行上打印一个整数。它可能是:

  • 如果查询正确且未超过查询次数限制,则返回查询的答案;
  • 如果查询不正确(例如,不满足 1tn1 \le |t| \le n 或字符串 tt 包含 0011 以外的字符),或者你在当前测试用例中查询次数过多,则返回整数 1-1

要提交答案,你的程序应按以下格式发送一行(打印后不要忘记刷新输出):

0 i c

其中 1in1 \le i \le ncc0011,表示你猜测 si=cs_i = c

如果你的猜测正确,评测程序会在一行上打印一个整数 11,表示你可以继续下一个测试用例(或如果是最后一个测试用例则终止程序),并且你已使用的查询次数会被重置。如果猜测不正确,评测程序会在一行上打印一个整数 1-1

在你的程序收到 1-1 作为响应后,应立即终止。这将导致你的提交得到WrongAnswer“Wrong Answer”的判决。如果你的程序没有终止,你的提交结果将是不确定的。


示例

输入

3     // 3 个测试用例
3     // 字符串长度为 3

1     // 101 出现 1 次

1     // 猜测正确
2     // 字符串长度为 2

0     // 00 出现 0 次

0     // 0 出现 0 次

1     // 猜测正确
2     // 字符串长度为 2

1     // 1 出现 1 次

0     // 01 出现 0 次

1     // 猜测正确

输出

1 101 // 询问 101 出现多少次

0 2 0 // 猜测 s[2] 是 0

1 00  // 询问 00 出现多少次

1 0   // 询问 0 出现多少次

0 1 1 // 猜测 s[1] 是 1

1 1   // 询问 1 出现多少次

1 01  // 询问 01 出现多少次

0 2 0 // 猜测 s[2] 是 0

注释
在示例中,有三个测试用例:10110111111010。请注意,// 后面的内容是解释交互中每行含义的注释。在真实的问题中,评测程序不会打印这些注释,你也不应打印它们。空行是为方便阅读而添加的,评测程序不会打印它们,你的解决方案也不应打印任何空行。