巫毒女士曾经编织过一幅神奇的挂毯。起初,她拿了一块空白的画布,可以表示为一个 $r$ 行 $c$ 列的 $r \times c$ 网格,因此有 $(r + 1) \times (c + 1)$ 个网格点。然后,她进行了若干次以下操作:她在画布上沿着网格线编织了一个环(cycle),在该环内每个网格点最多经过一次。此外,任意两个环不共享任何网格点。
最终,不位于画布边界上的 $(r-1)\cdot(c-1)$ 个内部网格点中,每一个都恰好被一个环经过。以下是 $r = 2, c = 3$ 时环排列的一些示例,其中内部网格点已被高亮显示:
然后,她把画布在地上放了一夜。在夜里,$r \cdot c$ 只绿色的青蛙跳上了画布,每个网格单元格里都坐着一只。但这只是巫毒女士麻烦的开始!因为随后,老女巫来到了画布前,将画布上编织的每一条线段一条接一条地拆掉了。
每当她拆掉两个相邻网格点之间的一条编织线段时,与该线段相邻的单元格中的青蛙就会受到惊吓(会有一只或两只青蛙受到惊吓,取决于该线段是否在边界上)。当一只青蛙受到惊吓时,它会立即改变颜色:如果青蛙是绿色的,它会变成棕色;如果它是棕色的,它会重新变成绿色。
如果环的排列如上图所示,那么颜色将如下所示(灰色单元格代表绿色青蛙,白色单元格代表棕色青蛙):
当巫毒女士回到她的画布前时,她只看到画布上有两种颜色的青蛙,但没有编织的环。根据给定的青蛙颜色排列,判断它是否可能由上述过程产生,如果可以,帮助巫毒女士恢复一种可能的环排列。
输入格式
每个测试点包含多个测试用例。第一行包含测试用例的数量 $t$ ($1 \le t \le 10^4$)。接下来是测试用例的描述。
每个测试用例的第一行包含两个整数 $r$ 和 $c$,表示网格的尺寸 ($2 \le r, c \le 10^3$)。
接下来的 $r$ 行中,每行包含一个由 $c$ 个字符组成的字符串,字符为 G 或 B,分别表示绿色和棕色的青蛙。
保证所有测试用例中 $r \cdot c$ 的总和不超过 $2 \cdot 10^6$。
输出格式
对于每个测试用例,如果给定的青蛙颜色可以由上述过程产生,则在第一行输出 YES,否则输出 NO。
如果答案为 YES,则再输出 $2r+ 1$ 行二进制字符串(包含字符 0 和 1)。其中前 $r+ 1$ 行每行长度为 $c$,表示水平网格线段;接下来的 $r$ 行每行长度为 $c+ 1$,表示垂直网格线段,具体说明如下:
在前 $r + 1$ 行中,第 $i$ 行的第 $j$ 个字符如果为 1,表示从左数第 $j$ 个、从上数第 $i$ 个水平网格线段上应该有一条编织线,否则为 0。
在接下来的 $r$ 行中,第 $i$ 行的第 $j$ 个字符如果为 1,表示从左数第 $j$ 个、从上数第 $i$ 个垂直网格线段上应该有一条编织线,否则为 0。
样例
输入样例 1
3 2 3 BBG GBB 3 3 GGG GGG GGG 3 3 GGG BBB GGG
输出样例 1
YES 001 101 100 0011 1100 YES 111 010 010 111 1001 1111 1001 NO
说明
第一个测试用例是说明中环排列的第一个示例。
在第二个样例测试用例中,样例中显示的输出如下图中的第一幅图所示。第二幅图中的环排列也是正确的,而第三幅图中的排列是不正确的,因为一些网格点被多个环共享。让网格保持空白也是不正确的,因为这样就没有环经过内部网格点了。