这是一个交互式问题。
一个淘气的机器人正在一个无限大的二维网格中导航。然而,它的移动被限制在第一象限,这意味着它的坐标 $(x, y)$ 必须始终满足 $x > 0$ 且 $y > 0$。最初,机器人位于网格坐标 $(s_x, s_y)$ 处。所有网格单元格最初都是白色的。
游戏在离散的时间步中进行,最多进行 $T = 1000$ 步。在每个时间步中,会发生以下顺序的事件:
- 你的移动:你选择整数坐标 $(x_m, y_m)$,满足 $1 \le x_m \le T$ 且 $1 \le y_m \le T$。然后你将该单元格标记为黑色。一个单元格一旦被标记为黑色,在游戏的余下时间里都将保持黑色。你可以标记该范围内的任何单元格,包括机器人当前所在的单元格。
- 机器人的移动:当前位于位置 $(r_x, r_y)$ 的机器人观察网格(包括你刚刚标记为黑色的单元格)。它知道所有当前为黑色的单元格的位置。然后它移动到一个新位置 $(n_x, n_y)$。新位置 $(n_x, n_y)$ 必须是与 $(r_x, r_y)$ 相邻(水平、垂直或对角线方向)的 8 个单元格之一。也就是说,$|n_x - r_x| \le 1$ 且 $|n_y - r_y| \le 1$,并且 $(n_x, n_y) \neq (r_x, r_y)$。此外,机器人必须留在第一象限内,因此 $n_x > 0$ 且 $n_y > 0$。交互器(控制机器人)将为机器人选择一个合法的移动。机器人的策略对你来说是未知的。
结果检查:在机器人移动到 $(n_x, n_y)$ 之后,系统检查单元格 $(n_x, n_y)$ 是否为黑色。
如果 $(n_x, n_y)$ 是黑色,机器人爆炸。
- 如果 $(n_x, n_y)$ 是白色,游戏继续进行到下一个时间步,机器人现在位于 $(n_x, n_y)$。
你的目标是使机器人在 $T$ 个时间步内爆炸。
输入格式
输入的第一行包含两个整数 $s_x$ 和 $s_y$ ($1 \le s_x, s_y \le 20$),表示机器人的初始坐标。
交互协议
交互最多进行 $T$ 轮。在每一轮 $t$(从 $t = 1$ 到 $T$)中:
- 你的程序必须输出一行,包含两个空格分隔的整数 $x_m$ 和 $y_m$,表示你在这一轮中选择标记为黑色的单元格的坐标。请记住刷新输出流。
- 交互器读取你选择的坐标 $(x_m, y_m)$。
- 交互器根据机器人的当前位置和所有黑色单元格的集合(包括刚刚在 $(x_m, y_m)$ 标记的单元格)来决定机器人的下一步移动 $(n_x, n_y)$。
交互器检查单元格 $(n_x, n_y)$ 是否为黑色。
如果它是黑色(机器人爆炸),交互器将输出单行
0 0并终止。你的程序随后应当读取这些值并成功终止。- 如果它是白色,交互器将输出单行,包含两个空格分隔的整数 $n_x$ 和 $n_y$,即机器人的新坐标。你的程序应当读取这些坐标,以获取机器人下一轮的当前位置。
如果机器人在你进行了 $T$ 次移动后仍未爆炸,你的程序应当终止。在这种情况下(或者如果你超过了轮数限制或进行了无效移动),你的解答将被判定为错误。
要刷新输出,你可以使用:
- C 和 C++ 中的
fflush(stdout)(如果使用printf)或cout.flush()(如果使用cout)。 - Java 中的
System.out.flush()。 - Python 中的
stdout.flush()。
注意:如果你的程序没有正确终止,可能会被判定为格式错误(Presentation Error, PE)。
样例
样例输入 1
5 5 5 4 5 3 5 2 5 1 0 0
样例输出 1
6 1 4 1 6 2 4 2 5 2