#CF2037E. Kachina 最爱的二进制字符串

Kachina 最爱的二进制字符串

当前没有测试数据。

E. Kachina 最爱的二进制字符串 每次测试的时间限制:2 秒
每次测试的内存限制:256 兆字节

这是一个交互式问题。

Kachina 向你发起挑战,要求你猜出她最喜欢的长度为 nn 的二进制字符串 ss
她定义 f(l,r)f(l, r) 为子串 slsl+1srs_l s_{l+1} \dots s_r子序列 0101 的数量。
两个子序列被认为是不同的,如果它们是由原字符串中删除不同位置的字符得到的,即使产生的子序列由相同的字符组成。

为了确定 ss,你可以问一些问题。在每个问题中,你可以选择两个索引 llrr1l<rn1 \le l < r \le n),并询问她 f(l,r)f(l, r) 的值。

在问了不超过 nn 个问题后,确定并输出 ss
然而,有可能 ss 无法被确定。在这种情况下,你需要报告 IMPOSSIBLEIMPOSSIBLE

形式化地说,如果无论如何提问,在问了 nn 个问题后,总是有多种可能的 ss 字符串,则 ss 是无法确定的。注意,如果你在存在一种不超过 nn 次询问的唯一确定二进制字符串的方法时报告 IMPOSSIBLEIMPOSSIBLE,将会得到 WrongAnswerWrong Answer


输入
第一行包含一个整数 tt1t1031 \le t \le 10^3)—— 测试用例的数量。

每个测试用例的第一行包含一个整数 nn2n1042 \le n \le 10^4)—— 字符串 ss 的长度。

保证所有测试用例的 nn 之和不超过 10410^4


交互
要问一个问题,请按如下格式输出一行(不要加引号):

? l r

其中 1l<rn1 \le l < r \le n
评审会返回一个整数 f(l,r)f(l, r)

当你准备好输出答案时,输出一行,格式如下:

  • 如果 ss 无法被确定,则输出 !IMPOSSIBLE! IMPOSSIBLE
  • 否则输出 !s! s

之后,继续处理下一个测试用例,或者如果是最后一个测试用例则终止程序。输出答案不算作一次查询。

交互器是非自适应的,意思是答案在参与者提问之前就已经确定,并且不依赖于参与者所提的问题。

如果你的程序对一个测试用例提出的问题超过 nn 次,你的程序应立即终止,以得到 WrongAnswerWrong Answer。否则,你可能会因为试图从已关闭的流中读取而得到任意裁决。

在每次查询后,不要忘记输出换行并刷新输出缓冲区。否则,你可能会得到 IdlenesslimitexceededIdleness limit exceeded
为此,请使用:

  • C++fflush(stdout)C++:fflush(stdout)cout.flush()cout.flush()
  • JavaSystem.out.flush()Java:System.out.flush()
  • Pascalflush(output)Pascal:flush(output)
  • Pythonstdout.flush()Python:stdout.flush()
  • 其他语言请查看相应文档。

Hack 格式
若要提交 HackHack,请使用以下格式:

第一行包含一个整数 tt1t1031 \le t \le 10^3)—— 测试用例的数量。

每个测试用例的第一行包含一个整数 nn2n1042 \le n \le 10^4)—— 字符串 ss 的长度。

接下来的一行包含 ss,一个长度为 nn 的二进制字符串。

所有测试用例的 nn 之和不超过 10410^4


示例

输入

2
5

4

0

1

2

2

0

输出

? 1 5

? 2 4

? 4 5

? 3 5

! 01001

? 1 2

! IMPOSSIBLE

注释
在第一个测试用例中:

  • 第一次查询中,你询问 Kachina f(1,5)f(1,5) 的值,她回答 44
  • 第二次查询中,你询问 f(2,4)f(2,4)。因为字符串 100100 中没有 0101 子序列,她回答 00

在问了 44 个问题后,你报告 ss0100101001,答案正确。

在第二个测试用例中:

  • 第一次查询中,你询问 f(1,2)f(1,2),她回答 00。注意这是你唯一可以问的不同问题。

但注意,字符串 00001111 的答案都是 00,无法区分两者。因此我们报告 IMPOSSIBLEIMPOSSIBLE

请注意,该示例仅用于演示交互格式。不能保证所提供的查询是最优的或能唯一确定答案。不过可以证明,存在不超过 55 次查询的序列,可以唯一确定第一个样例的答案。