E. 分段函数

交互 1000 ms 256 MiB

题目描述

这是一道交互题

SEUSEU最菜的 dd 有一个分段函数:

f(x)={kx+bnxaka+ba<x<a+1k(x1)+ba+1xmf(x) = \begin{cases} kx+b & n\le x \le a \\ ka+b & a< x < a+1\\ k(x-1)+b & a+1\le x \le m \end{cases}

其中 k,a,bk,a,b均为未知数。

他需要你猜测出kkaa的值,不过,他也不会为难你,你可以问他一些问题后再猜。

在每组数据中,你最多可以询问31次,询问方式如下:

  • ? x1 x2 :他会告诉你 f(x2)f(x1)f(x2)-f(x1) 的值,其中你需要保证 nx1x2mn\le x1 \le x2 \le m

当你确定答案后,你可以以如下方式给出答案:

  • ! k a :即分别给出kkaa的值。

打印查询后,不要忘记输出行尾并刷新输出。否则,您将得到超出时间限制。要做到这一点,请使用:

  • c++中的 fflush(stdout)cout.flush() ;
  • Java中的 System.out.flush() ;
  • Pascal中的 flush(output) ;
  • Python中的 stdout.flush() ;
  • 有关其他语言,请阅读其参考文档。

输入格式

第一行,一个整数t1t103t(1\le t\le 10^3),代表数据组数。

对于每组数据:
输入仅有两个数字n,mn,m 代表函数的定义域。

保证0n<m1090\le n<m\le 10^92mn1092 \le m-n\le 10^9 , k,ak,a均为正整数且 1k1061\le k \le 10^6 , na<mn \le a < m

保证 n,mn,m为非负整数。

输出格式

对于每组数据,按照交互方式输入输出即可。

样例

输入样例:

1
1 4

1

0

输出样例:

? 1 3

? 2 2

! 1 2

样例解释: dd 的分段函数为:

f(x)={x1145141x221145142<x<3x1145153x4f(x) = \begin{cases} x-114514 & 1\le x \le 2 \\ 2-114514 & 2<x<3\\ x-114515 & 3\le x \le 4 \end{cases}

所以 k=1,a=2k=1,a=2

数据范围与提示

如果你的询问次数超过31次或者输出不合法或者答案错误,会被判做 Partilly CorrectTime Limit Exceeded

输入输出样例仅能代表本题的交互方式,与本题目的做法没有任何关联。