在一个 $5 \times 5$ 的网格中隐藏着一个 $2 \times 2$ 的宝藏盒。行号和列号均为 1 到 5,其中 $(1, 1)$ 为网格的左上角。你的目标是在 5 次查询内找到宝藏。你可以查询一个网格单元格,询问该单元格内是否包含宝藏盒的任何部分。在最多 5 次查询后,你必须输出宝藏盒的左上角坐标。
交互
你的程序最多可以对宝藏的位置进行 5 次查询。进行查询时,请打印一行如下格式的内容:
? i j
其中 $i$ 和 $j$ 是 1 到 5 之间的整数。你是在询问第 $i$ 行第 $j$ 列的单元格是否包含宝藏盒的一部分。每次查询后,交互器将返回 0(如果该单元格不包含宝藏的任何部分)或 1(如果包含)。
确定正确答案后,请按如下格式在新的一行中输出答案:
! i j
指定宝藏盒的左上角坐标。输出答案后,你的程序必须退出。如果你在输出答案后尝试读取响应,你将收到任意判决。
请记住在每次输出查询后刷新输出。
如果交互器收到任何无效或意外的输入,交互器将输出 $-1$ 并立即终止。你的程序必须正常退出才能获得正确的判决,否则它收到的判决可能是表示提交不正确的任意判决。
提供了一个 Python 测试工具。使用方法如下(你可能需要将 python3 替换为 python):
python3 testing_tool.py However-you-run-your-program
该工具按原样提供,你可以随意对其进行修改或扩充。该工具会尝试检测并报告常见错误,但不能保证通过测试工具的程序一定会被接受。
样例
样例 1
? 3 3 0 ? 2 2 1 ? 1 1 0 ? 1 3 1 ! 1 2