#CF1994H. Fortnite

Fortnite

Fortnite

时间限制:1 秒
空间限制:256 MB

这是一道交互题!

Timofey 正在举办一场名为 Capture the Flag(简称 CTF)的比赛。他还有一个任务需要完成,这个任务涉及入侵一个安全系统。整个系统基于多项式哈希∗。

Timofey 可以向系统输入一个由小写拉丁字母组成的字符串,系统会返回它的多项式哈希值。为了入侵系统,Timofey 需要找出系统所使用的多项式哈希参数(ppmm)。

Timofey 没有太多时间了,所以他最多只能进行 3 次查询。请帮他完成这个任务。

∗ 对于长度为 nn 的由小写拉丁字母组成的字符串 ss,基于 pp 且模 mm 的多项式哈希值为:

$$( \operatorname{ord}(s_1) \cdot p^{0} + \operatorname{ord}(s_2) \cdot p^{1} + \dots + \operatorname{ord}(s_n) \cdot p^{n-1} ) \bmod m $$

其中 sis_i 表示字符串 ss 的第 ii 个字符,ord(chr)\operatorname{ord}(\text{chr}) 表示字符 chr\text{chr} 在英文字母表中的序号(a=1, b=2, …, z=26),xmodmx \bmod m 表示 xx 除以 mm 的余数。

输入格式

每个测试包含多个测试用例。第一行包含一个整数 tt1t1031 \le t \le 10^3)—— 测试用例的数量。

保证系统使用的 ppmm 满足条件:26<p5026 < p \le 50p+1<m2109p+1 < m \le 2 \cdot 10^9

交互方式

要向系统发出查询,请输出 ? s,其中 ss 是一个长度不超过 5050 的字符串,表示你想知道它的哈希值。在此查询的回复中,你将收到字符串 ss 的多项式哈希值。

若要输出答案,请输出 ! p m,其中 pp 是哈希的基数,mm 是模数。之后立即进入下一个测试用例。

你最多只能进行 3 次 ? 查询,否则你将得到 Wrong Answer

输出查询后,别忘了输出换行符并刷新输出缓冲区。否则你将收到 Idleness limit exceeded

样例输入

1

32

28

样例输出

? aa

? yb

! 31 59

样例解释

第一个查询的答案是 $(\operatorname{ord}(a) \cdot 31^0 + \operatorname{ord}(a) \cdot 31^1) \bmod 59 = (1 + 1 \cdot 31) \bmod 59 = 32$。

第二个查询的答案是 $(\operatorname{ord}(y) \cdot 31^0 + \operatorname{ord}(b) \cdot 31^1) \bmod 59 = (25 + 2 \cdot 31) \bmod 59 = 28$