#59486. 井字棋

井字棋

暂无测试数据。

井字棋,是一种在 $3\times 3$ 格子上进行的连珠游戏,然后两个游戏者分别使用 $O$ 和 $X$ 轮流在格子里留下标记(一般来说先手者为 $X$),任意三个相同的标记形成一条直线(横线、竖线、两条对角线),则为当前操作者获胜。

蒜头君和花椰妹两人在玩井字棋,蒜头君先手,使用 $X$ 进行标记,花椰妹使用 $O$ 进行标记。

最初棋盘为空,现在已知两人依次的操作的具体内容,操作指令包括:

  1. 操作指令:op x y,若 $op=1$,则表示蒜头君在 $(x,y)$ 处放下一枚 $X$ 棋子。
  2. 操作指令:op x y,若 $op=2$,则表示花椰妹在 $(x,y)$ 处放下一枚 $O$ 棋子。
  3. 操作指令:op x y,若 $op=3$,则当前操作的人悔棋(当前操作的人一定是先放一个棋子再悔棋),接下来当前操作的人会再一次在棋盘上 $(x,y)$ 处放置一枚棋子。且每个人最多可以悔棋一次。

已知所有的操作指令合法,不会产生冲突,并且保证蒜头君和花椰妹两人是轮流合法操作(注意:在某人的一轮游戏中,一般操作只包括放棋子;但是如果存在悔棋的话,操作包括先放棋子,再悔棋,然后再放棋子)。保证除了最后一条操作指令外,游戏不会产生结果(不会产生输赢的情况)。

首先你需要先输出所有操作后的棋盘情况;

其次如果最多再让一个人放置一枚棋子(轮流操作中,该谁操作,它就可以再放一枚棋子,如果当前棋盘已经放满棋子了,则不能再放棋子),那么最优的情况下游戏是否会产生结果。

  • 如果存在一种情况,产生了结果,若蒜头君赢了,则输出 suantoujun;若花椰妹赢了,则输出 huayemei
  • 如果任何情况后没有产生结果,则输出 draw

输入格式

输入第一行包括一个正整数 $n(1\leq n \leq 11)$,表示操作指令的数量。

接下来 $n$ 行,每行一条操作指令,操作指令的格式为 op x y,其中 $(1\leq x, y \leq 3)$ 含义如题目中所示。

输出格式

输出分为两部分:

第一部分为一个 $3\times 3$ 的字符数组矩阵,表示所有操作后的棋盘情况。如果棋盘的某个位置上没有棋子,则输出 #,如果是蒜头君放置的棋子,则输出 X,如果是花椰妹放置的棋子,则输出 O

第二部分占一行,为一个字符串,表示最多再让一个人放置一枚棋子,游戏的结果情况。

  • 如果存在一种情况,产生了结果,若蒜头君赢了,则输出 suantoujun;若花椰妹赢了,则输出 huayemei
  • 如果任何情况后没有产生结果,则输出 draw
6
1 3 2
3 1 1
2 2 1
1 3 1
2 1 2
3 3 2
X##
O##
XO#
draw
7
1 1 1
2 3 2
1 2 2
2 3 3
1 2 1
2 1 3
1 3 1
X#O
XX#
XOO
suantoujun
6
1 3 1
3 2 2
2 2 1
1 3 1
2 2 3
3 1 1
O##
OX#
X##
suantoujun