俄罗斯方块(Tetris)是一款经典的益智电子游戏。在俄罗斯方块中,玩家通过将不同形状的方块(称为 tetrominoes)降落到游戏区域来填满行。填满的行会消失并为玩家提供分数。
Elegant Tetris 是俄罗斯方块的一个略有不同的变体。在 Elegant Tetris 中,你需要为每一个落下的方块选择形状、旋转次数以及降落位置。
共有 7 种不同的方块形状,每种形状由一个大写字母表示,如图 T-1 所示。
T-1
在决定方块形状后,你可以选择将该方块旋转多少次。每个方块至少旋转 0 次,最多旋转 3 次。每次旋转将方块顺时针旋转 $90^\circ$。例如,O 型方块旋转后不会改变,但 L 型方块的旋转变化如图 T-2 所示。
T-2
然后你可以决定方块降落的位置。当方块触及游戏区域底部或其他方块时,它会停止。注意,在 Elegant Tetris 中,方块在下降过程中不能水平移动。例如,如图 T-3 所示,T 型方块在普通俄罗斯方块中可以放置在 $1 \times 1$ 的方块下方,但在 Elegant Tetris 中则不行。
T-3
当落下的方块停止后,所有已完成(完全填满)的行会消失,上方的行会下落,如图 T-4 所示。如果在此之后仍有高度不小于 20 的填充方块,则游戏结束。
T-4
给定一个宽度为 $w$ 且已有部分方块填充的初始游戏区域,Nikuniku 想知道如何通过不少于 1 次且不超过 10000 次的移动,在不触发游戏结束的前提下,回到初始的游戏区域状态。
输入格式
第一行包含两个整数 $w$ ($4 \le w \le 1000$) 和 $n$ ($0 \le n \le 15$),其中 $w$ 是游戏区域的宽度。
接下来的 $n$ 行,每行包含一个长度为 $w$ 的字符串,表示游戏区域最底部的 $n$ 行。字符串由两个符号 ‘#’ 和 ‘.’ 组成。‘#’ 表示该位置有方块,‘.’ 表示为空。初始游戏区域中没有完全填满的行。初始游戏区域中高度 $n$ 以上的所有行均为空。
保证该挑战有解。注意,不保证存在从空游戏区域到达初始游戏区域的移动序列。
输出格式
第一行输出一个整数 $len$ ($1 \le len \le 10000$),表示进行的移动次数。注意 $len$ 不必是可能的最小移动次数。
接下来的 $len$ 行,每行输出一个大写字母 $ch$ ($ch \in \{‘L’, ‘J’, ‘O’, ‘S’, ‘Z’, ‘T’, ‘I’\}$) 和两个整数 $a$ ($0 \le a \le 3$) 以及 $x$ ($1 \le x \le w$),中间用空格分隔,分别表示方块形状、旋转次数和最左侧方块的坐标。
样例
样例输入 1
5 2 #.... .#..#
样例输出 1
5 Z 0 2 O 0 4 L 1 1 S 1 1 J 3 3
样例输入 2
5 4 #.... ###.. ####. #..#.
样例输出 2
5 L 2 4 L 0 4 O 0 2 L 1 1 J 1 1
说明
下图展示了第一个样例测试用例的情况。
T-5