这是一个交互式问题。
五子棋(Gomoku)是一个在二维网格上进行的双人游戏。网格的每个格子要么是空的,要么包含第一个玩家的棋子(黑色),要么包含第二个玩家的棋子(白色),不能同时包含两者。游戏开始时,整个网格是空的。两名玩家轮流落子,由第一个玩家先手。每一步,玩家可以将自己的棋子放入一个空的格子中。第一个在单行(横向、纵向或对角线)中连成五个棋子的玩家获胜。
第二个玩家(白棋)获胜的位置。
在本题中,玩家使用 $19 \times 19$ 的网格。如果整个网格被填满但没有玩家获胜,则判定为平局。
第一个玩家使用以下策略:第一步,她将棋子放在网格的中心。在随后的每一步中,她选择一个能使当前局面得分最大化的位置。
为了计算局面的得分,第一个玩家会考虑所有可能形成获胜组合的位置——换句话说,棋盘上所有横向、纵向和对角线方向上连续五个格子的行(当然,它们可能会相互重叠)。如果某一行同时包含第一个玩家和第二个玩家的棋子,则忽略该行。如果某一行没有任何棋子,也忽略该行。对于每一行,如果恰好有 $k$ ($1 \le k \le 5$) 个第一个玩家的棋子且没有第二个玩家的棋子,则将 $50^{2k-1}$ 加入到局面得分中。对于每一行,如果恰好有 $k$ 个第二个玩家的棋子且没有第一个玩家的棋子,则从局面得分中减去 $50^{2k}$。最后,在得分中加上一个 $0$ 到 $50^2 - 1$ 之间的随机整数。这个随机数是均匀分布的。
如果第一个玩家有多个移动方案得分相同(由于上述随机加数,这种情况很少见),第一个玩家会选择 $x$ 坐标最小的那个;如果 $x$ 坐标相同,则选择 $y$ 坐标最小的那个。
你的任务是编写一个程序,作为第二个玩家并击败该策略。你的程序将针对上述策略进行 100 场比赛,并使用不同的随机数生成器种子。你的程序必须赢得所有这些比赛。
交互
在每一步中,你的程序必须:
- 从输入中读取数字 $x$ 和 $y$。
- 如果这两个数字都等于 $-1$,则游戏结束,你的程序必须退出。
- 否则,这些数字是第一个玩家的落子坐标 ($1 \le x, y \le 19$)。
- 输出第二个玩家的落子坐标,并换行。不要忘记刷新输出缓冲区。
样例
在下面的示例中,第一个玩家没有使用题目描述中的策略。该示例仅用于说明交互格式。
样例输入 1
10 10 10 11 10 12 10 13 9 10 9 11 9 9 11 13 -1 -1
样例输出 1
11 10 11 11 10 9 10 14 8 9 11 9 11 12 11 8
示例中的最终局面。
说明
世界上有很多五子棋规则的变体。请仅考虑本题目描述中给出的规则。