EOJ Monthly 2021.10 Sponsored by TuSimple

F. oh my cuber

单点时限: 2.0 sec

内存限制: 512 MB

这是一道交互题。

Cuber QQ 发现了 $n$ 个标号 $1$ 到 $n$ 的魔法石,第 $i$ 个魔法石中蕴藏着黑暗能量 $p_i$ ($1 \le p_i \le n$),不同的魔法石之间的能量不同。

为了拯救愚蠢的碳基生物,Cuber QQ 需要知道每个魔法石的能量是多少。伟大的 Cuber QQ 决定使用自己的身体进行能量测试。当Cuber QQ 把第 $x$ 个魔法石放在左手,第 $y$ 个魔法石放在右手时,它的头上就会出现 $p_x \bmod p_y$ 的值。

但是 Cuber QQ 的身体只能承受至多 $\lfloor \frac{6n}{5} \rfloor$ 测试。

你能帮助 Cuber QQ 找出每个魔法石的能量吗。

输入格式

第一行:一个整数 $n$ $(13000 \le n \le 20000)$,表示魔法石的个数。

接下来,对于你的每组询问 ? x y,交互器将会输出 $p_x \bmod p_y$ 的值,你需要将它输入。

输出格式

如果你要提出一次询问,以 ? x y $(1 \le x,y \le n)$ 的格式输出,表示你希望把第 $x$ 个魔法石放在 Cuber QQ 的左手,第 $y$ 个魔法石放在 Cuber QQ 的右手来询问 $p_x \bmod p_y$。

如果你确定了答案,请以 ! p_1 p_2 ... p_n 的格式输出。输出之后,请你立即结束程序。

请注意,你需要在每输出一行之后执行 flush 操作,否则你提交的程序有可能会被判定为 Idleness limit exceeded。适用于各种语言的 flush 函数如下:

  • 对于 C++ 语言,你可以使用 fflush(stdout)
  • 对于 Java 语言,你可以使用 System.out.flush()
  • 对于 Pascal 语言,你可以使用 flush(output)
  • 对于 Python 语言,你可以使用 sys.stdout.flush()

样例

Input
5

1

3

2
Output
? 1 2

? 3 4

? 2 5

! 1 2 3 4 5

提示

样例仅作为演示,不代表真实的数据范围。