CF2037E Kachina's Favorite Binary String

题目描述

这是一道交互题。 卡齐娜有一个长为 $n$ 的 01 串 $s$。她定义 $f(l,r)$ 为子段 $s_ls_{l+1}\cdots s_r$ 中等于 $\texttt{01}$ 的子序列的个数。子序列不要求连续;两个位置不同的子序列被认为是 **不同** 的,即便它们含有相同的字符序列。 你需要通过向卡齐娜提问来猜出 $s$。每次提问,你可以选择两个下标 $l,r(1\le l < r\le n)$,询问她 $f(l,r)$ 的值。你最多提问 $n$ 次。如果 $s$ 不可能在 $n$ 次询问内确定,输出 $\texttt{IMPOSSIBLE}$。

输入格式

第一行一个整数 $t(1\le t\le 10^3)$ — 测试数据的组数。 每组测试数据一行一个整数 $n(2\le n\le 10^4)$ — 01 串 $s$ 的长度。 保证各组测试数据 $n$ 的总和不超过 $10^4$。

输出格式

每次提问,按照以下格式输出一行(不含括号): - $\texttt{? l r}(1\le l < r\le n)$ 测试程序会返回一个整数 $f(l,r)$。当你确定答案后,按照以下格式输出一行: - 如果 $s$ 无法确定,输出 $\texttt{"! IMPOSSIBLE"}$ - 否则输出 $\texttt{"! s"}$ 输出答案不算一次提问。

说明/提示

**第一个样例:** 第一次提问中,你询问卡齐娜 $f(1,5)$ 的值,她向输入流中返回 $4$。 第二次提问中,你询问卡齐娜 $f(2,4)$ 的值。因为在 $\texttt{100}$ 中没有等于 $\texttt{01}$ 的子序列,她向输入流中返回 $0$。 提问四次后,你输出正确答案 $\texttt{01001}$。 **第二个样例:** 第一次提问中,你询问卡齐娜 $f(1,2)$ 的值,她向输入流中返回 $0$。 注意到你除了 $\texttt{? 1 2}$ 提不出别的问题了,但 01 串 $\texttt{00}$ 和 $\texttt{11}$ 的答案都是 $0$,无法确定唯一答案,所以输出 $\texttt{IMPOSSIBLE}$。 样例仅用于展示交互格式,不代表正解方法。