#CF2129C1. 交互式正则括号序列(简单版)

交互式正则括号序列(简单版)

C1. 交互式正则括号序列(简单版)
时间限制:22
内存限制:256256 MB

这是一道交互题。

这是问题的简单版本,区别仅在于查询次数限制不同。只有解决了该问题的所有版本,你才能进行 hack。

有一个隐藏的长度为 nn 的括号序列 ss,其中 ss 仅包含 '('')'。保证 ss 至少包含一个 '(' 和一个 ')'

为了找出这个括号序列,你可以进行查询。每次查询的格式为:选择一个整数 kk 以及任意的下标 i1,i2,,iki_1, i_2, \dots, i_k (1k10001 \le k \le 10001i1,i2,,ikn1 \le i_1, i_2, \dots, i_k \le n)。注意下标可以重复。然后,你会收到陪审团计算出的一个整数 f(si1si2sik)f(s_{i_1} s_{i_2} \dots s_{i_k})

对于一个括号序列 ttf(t)f(t) 表示 tt 中非空的正则括号子串的数量(子串必须连续)。例如,f("()())")=3f(\texttt{"()())"}) = 3

括号序列称为正则的,当且仅当它可以通过以下方式构造:

  • 空序列 \varnothing 是正则的。
  • AA 是正则的,则 ( ⁣A ⁣)\texttt{(}\!A\!\texttt{)} 也是正则的。
  • AABB 都是正则的,则它们的拼接 ABAB 也是正则的。

例如,序列 "(())()""()" 是正则的,而 "(()""())(" 不是。

请使用不超过 550550 次查询找出序列 ss

输入
每个测试包含多个测试用例。第一行包含测试用例数 tt (1t201 \le t \le 20)。接下来是测试用例的描述。

交互
每个测试用例的第一行包含一个整数 nn (2n10002 \le n \le 1000)。此时括号序列 ss 已经选定。本题的交互器是非自适应的,即 ss 在每个测试用例中固定,且在交互过程中不会改变。

要进行一次查询,你需要选择一个整数 kk 和任意的下标 i1,i2,,iki_1, i_2, \dots, i_k (1k10001 \le k \le 10001i1,i2,,ikn1 \le i_1, i_2, \dots, i_k \le n),并按以下格式输出一行(不含引号):
? k i1 i2 ... ik
然后你会收到一个整数 f(si1si2sik)f(s_{i_1} s_{i_2} \dots s_{i_k})

这种查询最多进行 550550 次。

当你确定了括号序列 ss 后,输出一行如下格式(不含引号):
! s1 s2 ... sn
注意这一行不算入查询次数。

此后继续处理下一个测试用例。

如果在一次交互中询问超过 550550 次,你的程序必须立即终止,并会得到 Wrong Answer 判定。否则可能得到任意判定,因为你的程序将继续读取已关闭的流。

在输出查询或答案后,不要忘记输出换行并刷新输出。否则会得到 Idleness Limit Exceeded。在各语言中的做法:

  • C++: fflush(stdout)cout.flush()
  • Java: System.out.flush()
  • Pascal: flush(output)
  • Python: stdout.flush()
  • 其他语言请参考对应文档。

Hack
进行 hack 时,请遵循以下测试格式。

第一行包含测试用例数 tt (1t201 \le t \le 20)。接下来是测试用例的描述。
每个测试用例的第一行包含一个整数 nn (2n10002 \le n \le 1000)。
第二行包含一个括号序列 s1s2sns_1 s_2 \dots s_n,其中 sis_i'('')'
括号序列 ss 必须至少包含一个 '(' 和一个 ')'

样例
输入

2
3

0

1

1

2

3

输出


? 4 1 2 3 3

? 2 2 1

? 2 3 1

! )((

? 4 1 2 1 2

! ()

说明
第一个测试用例中,隐藏的括号序列为 s=")("s=\texttt{")("}
对于查询 ? 4 1 2 3 3,陪审团返回 00,因为 f(s1s2s3s3)=f(")(((")=0f(s_1 s_2 s_3 s_3) = f(\texttt{")((("}) = 0
对于查询 ? 2 2 1,返回 11,因为 f(s2s1)=f("()")=1f(s_2 s_1) = f(\texttt{"()"}) = 1
对于查询 ? 2 3 1,返回 11,因为 f(s3s1)=f("()")=1f(s_3 s_1) = f(\texttt{"()"}) = 1

第二个测试用例中,隐藏序列为 s="()"s=\texttt{"()"}
对于查询 ? 4 1 2 1 2,返回 33,因为 f(s1s2s1s2)=f("()()")=3f(s_1 s_2 s_1 s_2) = f(\texttt{"()()"}) = 3

注意样例仅用于说明题意,并不保证能唯一确定括号序列 ss