P17183 [ICPC 2017 Hong Kong R] Equivalence of Sudoku

题目描述

一个数独解是一个 $9 \times 9$ 的矩阵,其中数字 $1$ 到 $9$ 在每一行、每一列以及每个 $3 \times 3$ 的小方格中都只出现一次。给定一个数独解 $S$,很容易通过执行一种或多种基本变换生成许多与之等价的解:$R$ 表示旋转 $90$、$180$ 或 $270$ 度;$M$ 表示沿水平轴或垂直轴做镜像翻转;$B$ 表示将数字 $1$ 到 $9$ 双射替换为另一组 $1$ 到 $9$ 的数字。可见下例中 $S_1$、$S_2$、$S_3$ 均与 $S$ 等价。 :::align{center} ![](https://cdn.luogu.com.cn/upload/image_hosting/0wxnuyrv.png) ::: 一个部分数独是指并非所有 $81$ 个格子都填满的数独。我们说一个部分数独 $P_1$ 被另一个 $P_2$ 包含(小于 $P_2$),如果存在一个与 $P_2$ 等价的 $P$,且 $P$ 可以通过在 $P_1$ 基础上填入一个或多个格子而得到。下例中,$P_1$ 被 $P_2$ 相对于 $P$ 包含,其中 $P$ 可由 $P_2$ 顺时针旋转 $90$ 度后,再应用双射映射 $\{1,2,3,4,5,6,7,8,9\} \to \{2,9,3,7,8,6,1,5,4\}$ 得到。类似地,我们说 $P_2$ 包含 $P_1$,或者说 $P_2$ 相对于 $P$ 大于 $P_1$。注意,并不要求其中一个矩阵被完全填满。 :::align{center} ![](https://cdn.luogu.com.cn/upload/image_hosting/05u73lwp.png) ::: 总而言之,对于任意两个数独矩阵 $S_1$ 和 $S_2$,它们之间存在四种可能的关系:$S_1$ 等价于 $S_2$($E$)、$S_1$ 小于 $S_2$($L$)、$S_1$ 大于 $S_2$($G$)、$S_1$ 与 $S_2$ 不可比较($I$)。编写一个程序,读入 $n$ 个数独矩阵的列表,并确定它们两两之间的关系。输出是一个 $n \times n$ 的矩阵,展示关系($E, L, G, I$)。显然对角线上的元素全为 $E$(每个矩阵必然与自身等价)。

输入格式

第一行包含矩阵的个数 $n$。随后的每组 $9$ 行对应一个(部分)数独矩阵。未填的格子用 $0$ 表示(而不是空白)。假设 $2 < n \le 400$,所有输入数据均为合法的(部分)数独矩阵。

输出格式

对每一对输入矩阵,确定它们之间的关系,并将该关系作为一个字母 $O \in \{E, L, G, I\}$ 输出。每个输入矩阵对应一行输出(即输出 $n$ 行,每行 $n$ 个字符)。