皮尔特沃夫(Piltover)奥运会开幕式上,有 $N$ 名奥运运动员排成一队。队伍中的第 $i$ 名运动员属于皮尔特沃夫的某个区域 $D_i$,但组织者忘记告诉你每位运动员属于哪个区域。更糟糕的是,仪式即将开始,如果运动员不与来自同一区域的同伴站在一起,他们将无人可交谈。为了让所有运动员感到更舒适,你希望让来自同一区域的所有运动员在队伍中相邻。此外,尽管你没有运动员所属区域的列表,但你有一个设备可以与组织者沟通,并获取有关运动员所属区域的信息。你能在仪式开始前,找到一种让运动员感到舒适的排列方式吗?
输入格式
输入只有一行,包含一个整数 $N$ ($1 \le N \le 1\,000$),表示奥运运动员的数量。
交互
这是一个交互式问题。你可以使用标准输入和输出与奥运组织者进行交互,但在仪式开始前你只有时间提问 $10\,000$ 次。
要进行提问,请按以下格式写入标准输出:
? l r($1 \le l \le r \le N$) — 列表 $D_l, \dots, D_r$ 中有多少个不同的值?组织者将回复! k来告诉你其中有 $k$ 个不同的值。他们有一个坏习惯,即在每个回答前都会加上!,无论你如何抱怨他们都不会改正。
要提交期望的运动员排列,请按以下格式写入标准输出:
! P_1, \dots, P_N($1 \le P_i \le N$ 且所有 $P_i$ 互不相同) — 运动员 $P_i$ 应该排在第 $i$ 个位置,并且来自同一区域的运动员应该排在一起。更准确地说,对于任意 $1 \le i \le j \le k \le N$,如果 $D_{P_i} = D_{P_k}$,则 $D_{P_i} = D_{P_j}$。
可能存在多种满足上述条件的排列。你可以输出其中任意一种。
评测机是非适应性(non-adaptive)的,这意味着对于给定的测试用例,在参赛程序开始查询之前,$D_1, \dots, D_N$ 的值就已经确定。
允许的总查询次数为 $10^4$ 次,这意味着你的程序最多只能输出 $10^4$ 行以 ? 开头的询问。特别地,最终的答案不计入查询次数。如果超过了查询次数限制,你将获得 Wrong Answer 的评测结果。
任何不符合指定格式的查询都将立即导致 Wrong Answer 的评测结果。在打印查询后,请不要忘记输出换行符并刷新(flush)输出缓冲区。否则,你可能会获得 Idleness limit exceeded 的评测结果。你可以使用以下方法:
- C++ 中的
fflush(stdout)或cout.flush(); - Java 中的
System.out.flush(); - Python 中的
stdout.flush(); - 其他语言请参阅相关文档。
样例
输入格式 1
3 ! 1
输出格式 1
? 2 3 ! 3 2 1
说明
在样例交互中:
- 评测机输入 $N = 3$。
- 选手程序询问
? 2 3。 - 评测机回答
! 1,表示 $D_2$ 和 $D_3$ 相同。 - 选手程序输出最终排列
! 3 2 1。由于 $D_2 = D_3$,在排列 $P = [3, 2, 1]$ 中,对应的区域序列为 $[D_3, D_2, D_1]$。因为 $D_3 = D_2$,相同区域的元素依然相邻,满足条件。