这是一个交互式问题。
数轴上有一个位于 $l$ 和 $r$ 之间(包含 $l$ 和 $r$)的整数 $s$,你的任务是在最多 3 次询问内找到 $s$。
每次询问包含一个整数 $x$。交互器将输出 $|s - x|$ 作为询问的答案。
注意,交互器是非自适应的,这意味着每个测试用例的答案是预先确定的。
输入格式
输入包含多个测试用例。第一行包含一个整数 $T$ ($1 \le T \le 100$),表示测试用例的数量。每个测试用例:
第一行包含两个整数 $l$ 和 $r$ ($1 \le l \le r \le 10^9$)。
交互
进行询问时,输出一行。首先输出 ?,后跟一个空格,然后打印一个整数 $x$ ($1 \le x \le 10^9$)。
刷新输出后,你的程序应读取一个整数,表示询问的答案。
如果你想猜测这个特殊整数,输出一行。首先输出 !,后跟一个空格,然后打印一个整数 $s$ ($l \le s \le r$),表示该特殊整数。刷新输出后,你的程序应继续处理下一个测试用例,或者如果没有更多测试用例,则立即退出。注意,你的猜测不计入询问次数。
要刷新输出,你可以使用:
- 在 C 和 C++ 中使用
fflush(stdout)(如果你使用printf)或cout.flush()(如果你使用cout)。 - 在 Java 中使用
System.out.flush()。 - 在 Python 中使用
stdout.flush()。
样例
输入格式 1
2 20 25 2 1 0 100 200 160
输出格式 1
? 20 ? 21 ? 22 ! 22 ? 300 ! 140