P8430 [COI 2020] Zagrade

题目背景

**本题为交互题**。 众所周知,中央情报局的工作是收集,处理和分析国家安全信息。现在他们拥有了大量的计算机密码,并且正在开发一些相当复杂的工具,来破坏受密码保护的系统。 现在,您的任务是破坏中央情报局服务器的安全性。自然,他们很清楚人们在输入密码的时候通常会输入什么东西,因此尝试输入 `123456` , `1q2w3e4r` 或 `Welcome` 肯定是没有用的。幸运的是,我们发现了某些可能对您有用的信息。

题目描述

现在已知中央情报局服务器的主密码由 $n$ 个字符($n$ 为偶数)构成,其中一半是左括号,一半是右括号。一些记性不好的服务器管理员会忘记这个主密码,所以服务器提供了找回密码的工具。管理员最多可以使用 $Q$ 次这个工具,每次使用时都会询问这个密码 $l$ 到 $r$ 位的括号串是否合法。 对于一个括号串合法的定义: * `()` 是一个合法的括号串。 * 若 `A` 是一个合法的括号串,那么 `(A)` 也是一个合法的括号串。 * 若 `A` 与 `B` 都是合法的括号串,那么 `AB` 也是合法的括号串。 现在你需要写出一个程序来模拟管理员找回密码的过程。 在进行交互之前,您的程序应该从输入中读取偶数 $n$ 和整数 $Q$ ,这两个数字的含义见题目描述。 之后,您的程序可以通过向**标准输出**输出来发送查询请求。每个查询必须在单独的行中打印,并采用 `? a b`,其中 $1 \leq a \leq b \leq n$。每个查询之后,您的程序应**清空缓冲区**并从**标准输入**中读取答案。 当你推理出密码时,请在**标准输出**中输出: `! x1 x2 x3 …… xn` 的形式,之后你的程序应**清空缓冲区**并正常终止程序运行。

输入格式

第一行两个整数 $n,Q$。 接下来若干行,每行对于每个查询给出答案。

输出格式

若干行,表示查询。 最后一行表示最后得出的答案。

说明/提示

### 样例解释 `? 1 6` 对应的是整个串,当然是合法的。 `? 1 2` 对应的是 `((` 不合法。 `? 2 4` 对应的是 `(()` 不合法。 `? 2 5` 对应的是 `(())` 合法。 `? 3 4` 对应的是 `()` 合法。 ### 数据规模与约定 **本题采用捆绑测试** * Subtask 1(14 pts):$1\leq n\leq 1000$,$Q=\frac{n^2}{4}$,保证整个括号序列合法。 * Subtask 2(7 pts):$1\leq n\leq 1000$,$Q=\frac{n^2}{4}$。 * Subtask 3(57 pts):$1\leq n\leq 100000$,$Q=n-1$,保证整个括号序列合法。 * Subtask 4(12 pts):$1\leq n\leq 100000$,$Q=n-1$。 对于 $100\%$ 的数据,$1\leq n\leq 100000$,$n-1\leq Q$。 ### 说明 翻译自 [Croatian Olympiad in Informatics 2020 D Zagrade](https://hsin.hr/coci/archive/2019_2020/olympiad_tasks.pdf)。