Tetra-puzzle 是一款类似于俄罗斯方块的单人回合制游戏。游戏在一个 $5 \times 5$ 的方格棋盘上进行。初始时,棋盘为空。
在每一回合中,玩家必须在棋盘上放置一个指定种类的四格骨牌(tetramino)。四格骨牌是由四个相连的方格组成的图形。每块骨牌都可以旋转、翻转和平移,放置时必须占据棋盘上四个空的方格。放置后,检查棋盘上所有被填满的行和列,并将它们同时清除:这些行和列中的每一个方格都会重新变为空格。如果玩家无法进行移动,则判定为失败。
总共有五种四格骨牌。每种骨牌用一个大写英文字母表示,该字母的形状与骨牌的形状相似:
游戏有两种模式:基础模式和准备模式。在基础模式中,玩家依次获得 $n$ 个骨牌,必须在获得下一个骨牌之前放置好当前给定的骨牌。目标是成功完成所有 $n$ 次移动。
在准备模式中,玩家为基础模式中的下一场游戏进行规划。在准备阶段,玩家会立即获得 $n$ 对随机生成的骨牌:分别对应第 1, 2, ..., $n$ 次移动。对于每一对,玩家必须选择其中一个骨牌,该骨牌即为玩家在基础模式中对应回合将获得的骨牌。
你的任务是成功完成游戏,首先在准备模式下进行选择,然后在基础模式下使用准备好的骨牌完成游戏。
交互协议
在本题中,你的程序在每个测试点上会被运行两次。每一行输入均以换行符结尾。
在第二次运行期间,这是一个交互式问题。请记住在打印每次移动后立即刷新输出!
第一次运行
在第一次运行期间,你进行的是准备模式。第一行包含单词 “prepare”。第二行包含一个整数 $n$,表示回合数 ($1 \le n \le 1000$)。第三行包含 $n$ 个空格分隔的骨牌对:分别对应第 1, 2, ..., $n$ 次移动的两个选择。每一对由来自集合 “ILOTZ” 的两个大写字母给出,对应于该对中骨牌的种类。一对中的字母各不相同,且可以以任何顺序给出。在每个测试中,每一对都是预先随机选择的,从所有可能的选择中等概率选取,且与其他对的选择相互独立。
输出一行包含 $n$ 个字母(不含空格):对于每一回合,输出你选择的两个骨牌中的哪一个。
第二次运行
在第二次运行期间,你进行的是基础模式。第一行包含单词 “play”。第二行包含一个整数 $n$,表示回合数,与第一次运行相同 ($1 \le n \le 1000$)。随后是 $n$ 个回合。
在每一回合中,首先,程序读取一行,其中包含一个字母:第一次运行中为该回合选择的四格骨牌种类。作为响应,打印出已放置该骨牌后的棋盘,但要在清除填满的行和列之前。棋盘占用 5 行,每行包含 5 个字符。字符 “.” (点,ASCII 码 46) 表示空方格,字符 “#” (井号,ASCII 码 35) 表示在之前回合中占据的方格,字符 “*” (星号,ASCII 码 42) 表示放置在棋盘上的最新骨牌所占据的方格。
如果满足上述格式规则,但移动无效,程序将获得 “Wrong Answer”。
如果移动有效,所有填满的行和列将被清除,且占据的方格在后续回合中必须用 “#” 字符表示。之后进入下一回合。
如果所有 $n$ 个回合均已完成,程序将获得 “OK”。
样例
对于每个测试,第二次运行时的输入取决于第一次运行中程序的输出。以下展示了某程序在第一个测试点上的两次运行过程。空行仅为阅读方便而添加:实际运行中不会有空行。
样例输入 1
prepare 6 TO LO ZI LI LT LT
样例输出 1
OLZITT
样例输入 2
play 6 O L Z I T T
样例输出 2
..... **... **... ..... ..... ..*** ##..* ##... ..... ..... ..### ##**# ##.** ..... ..... ..### ..*.. ##*## ..*.. ..*.. ***## .*... ..... ..... ..... ..... *#... **... *.... .....