2024年东华大学与昭通学院联合程序设计竞赛

I. 琪露诺的考试

单点时限: 4.0 sec

内存限制: 512 MB

琪露诺考试又考了⑨分,慧音老师非常生气,惩罚琪露诺不把卷子做到满分就不放她出去。温柔的阿求把琪露诺的卷子换成了全是判断题的卷子,但琪露诺还是不会做,于是琪露诺找到拥有编程程度能力的你,希望你能帮她拿到满分。

每张卷子一共包含 n 道题,你可以多次作答,每道题的答案都是“对”或“错”,当完成 n 道题的作答后(不能空题),慧音老师会批改卷子并打分,但并不会告诉你哪些题做错了(不然就算是バカ也可以轻松通过)。

但是慧音老师是非常严格的,如果太多次都没有取得满分的话,她就会发动头槌!(尝试次数不能超过 600 次)

交互流程

每个测试点包含多组测试数据,第一行包含测试数据的组数 T (1T1000),每组测试数据的格式如下。

每组数据仅包含一行一个整数 n (1n2000),表示卷子上题目的数量。保证每个测试点内所有测试数据的 n 之和不超过 4000

Interaction

要提出询问,请使用一个字符串 S 表示你的猜测,|S|=n 并且 S 仅包含 01Si=1 表示第 i 题的答案为“对”,Si=0 表示第 i 题的答案为“错”)。然后输出“? S”。(例如:? 10101

对于每次询问,在清空输出缓冲区后,你的程序需要读入一个整数 cnt 表示本次猜测答对的题数。

当你确认了答案后,请同样使用一个字符串 S 表示你的答案,并输出“! S”。(例如:! 10101)。

请注意,每组测试答案都是预先确定的,也就是说,裁判程序不是自适应的。还请注意,输出答案不算一次询问。

清空输出缓冲区可以使用以下方式:

  • C 和 C++ 使用 fflush(stdout)(如果你使用 printf)或 cout.flush() (如果你使用 cout)。
  • Java 使用 System.out.flush()
  • Python 使用 stdout.flush()

样例

Input
2
3

3

2

1

2
Output
? 111

! 111

? 01

? 11

! 11