这是一个交互式问题。
CNOI(全国青少年信息学奥林匹克竞赛)通常指代中国的一系列信息学竞赛。中国的选手擅长解决复杂的数据结构问题和组合计数问题。此外,学生们的兴趣和个性各异,而社区也包容这种多样性。
Wuwuwu 先生是一位匿名教师,也是 CNOI 领域的大师。他非常喜欢各种数据结构问题,并经常思考是否能从中挖掘出新的东西。今天,他正在教他的学生 Little Cyan Fish 如何解决以下问题。
图 2:黄槿,又称 pua alo alo,是夏威夷的州花。
原问题
给定一个长度为 $n$ 的字符串 $S$,由 $[1, 10^9]$ 范围内的正整数组成。你需要处理 $q$ 次询问。每次询问给定两个整数 $l$ 和 $r$,你需要计算字符串 $S[l \dots r]$ 中不同子串的数量。
这个问题大约 10 年前首次出现在中国,此后便闻名世界。然而,Wuwuwu 先生认为这个问题对于 2024 年来说太简单了,因此他提出了一个略有不同的版本:
新问题
存在一个长度为 $n$ 的字符串 $S$,由 $[1, 10^9]$ 范围内的正整数组成。你最多可以进行 $10^4$ 次以下询问:
? l r:询问字符串 $S[l \dots r]$ 中不同子串的数量($1 \le l \le r \le n$)。
你的任务是通过这些询问恢复原始字符串 $S$。如果存在多个可能的字符串,你可以输出其中任意一个。特别地,当且仅当对于所有 $1 \le l \le r \le n$,字符串 $T[l \dots r]$ 中不同子串的数量与字符串 $S[l \dots r]$ 中不同子串的数量相等时,字符串 $T$ 被视为正确答案。
你能向 Wuwuwu 先生证明你能解决这个新问题吗?
交互
输入的第一行包含一个整数 $n$($2 \le n \le 10^3$)。
随后交互开始。在交互过程中,你最多可以进行 $10^4$ 次询问。要进行一次询问,你需要打印一行 ? l r($1 \le l \le r \le n$),表示一次询问。然后,你需要从标准输入读取询问的结果。
要给出你的答案,你需要打印 ! s1 s2 ... sn($1 \le s_i \le 10^9$)。如果存在多个可能的答案,你可以输出其中任意一个。打印答案不被视为询问,且不计入 $10^4$ 次询问的限制。打印答案后,你需要立即终止程序。
在打印询问后,不要忘记输出换行并刷新缓冲区。为此,请在 C++ 中使用 fflush(stdout) 或 cout.flush(),在 Java 中使用 System.out.flush(),在 Pascal 中使用 flush(output),或在 Python 中使用 stdout.flush()。
在本题中,保证交互器是非自适应的。也就是说,字符串 $s$ 在交互过程开始前就已经确定,不会根据你的询问而改变。
样例
输入格式 1
12 1 3 72 25 19
输出格式 1
? 1 1 ? 1 2 ? 1 12 ? 6 12 ? 5 10 ! 6 12 15 23 5 18 12 5 20 20 5 18