『JROI-4』Sunset

题目背景

写不出优美的文字,索性不放背景了。【背景待填充】 > 由于这只是个 C,出题人打算良心点,于是加了几个 $0$(指交互次数)(确信)——验题人注。

题目描述

**这是一道交互题。** 落日可以抽象成一个序列 $\{a_n\}$. $\{a_n\}$ 是一个 $1\sim n$ 的排列。 你还有一个数列 $\{d_n\}$,为**当前** $a$ 数列的前缀最大值。 换言之, $$d_i=\max_{j=1}^i \{a_j\}$$ 注意:根据前文的定义,$\{d_n\}$ 可能随着 $\{a_n\}$ 数列的改变而改变。 您可以进行两种不同的操作: - 指定一个 $i$,询问对于当前的 $a$ 数列, $d_{1\sim i}$ 中有几个不同的值。 - 指定一个 $i$,使得 $a_i\leftarrow 0$. 请使用不超过 $5500$ 次操作求出**原排列**。 **保证交互库是静态的,即交互库不会在交互过程中改变 $a$ 数列。**

输入输出格式

输入格式


本题多测,第一行一个整数 $T$,表示测试组数,接下来 $T$ 行每行一个整数 $n$,表示本组数据下数列的长度。 本题使用 IO 交互模式。 ### 交互格式 - `? 1 i` 询问 $d_{1\sim i}$ 中有几个不同的值,交互库会返回一个正整数 $x$ 表示答案。 - `? 2 i` 使 $a_i=0$。 - `! a1 a2 a3 ... an` 输出答案。 请注意:在每组数据中,请保证前两种操作的次数总和不超过 $5500$。 需要注意的是,在每一次操作后,需要调用以下函数刷新缓存: - 对于 C/C++:`fflush(stdout);` - 对于 C++:`std::cout << std::flush;` - 对于 Java:`System.out.flush();` - 对于 Python:`stdout.flush();` - 对于 Pascal:`flush(output);` 对于其他语言,请自行查阅对应语言的帮助文档。

输出格式


见「交互格式」。

输入输出样例

输入样例 #1

1

3

1

2

3


2

输出样例 #1




? 1 1

? 1 2

? 1 3

? 2 2
? 1 3

! 1 2 3

说明

**样例仅供理解交互过程,可能不符合逻辑。** 【样例解释】 初始的序列 $a$ 为 `1 2 3`,$d$ 为 `1 2 3`. 在对交互库输出了形如 `? 2 2` 的命令后,序列 $a$ 变为 `1 0 3`,$d$ 变为 `1 1 3`,此时 $d_1\sim d_3$ 中有 $2$ 种不同的值,分别是 $1,3$. ------------ 可供选手参考的资料:[OI Wiki-交互题](https://oi-wiki.org/contest/interaction/) **|** [猜数(IO交互版) ](https://www.luogu.com.cn/problem/P1733) ------------ ## 数据范围 - 对于 $10\%$ 的数据,$T=1$; - 对于 $30\%$ 的数据,$n\le 70$; - 对于另外 $20\%$ 的数据,保证数列 $a$ 随机生成; - 对于全部数据:$T \leq 10,1\leq n\leq 500$。