CF2181K Knit the Grid

题目描述

伏都教女巫曾经编织过一块神奇的挂毯。起初,她拿了一块空白画布,可以表示为一个 $r \times c$ 的网格,有 $r$ 行和 $c$ 列,因此共有 $(r + 1) \times (c + 1)$ 个网格点。然后,她进行了若干次以下操作:在画布上沿网格线编织一个圈(闭合回路),该圈在编织过程中每个网格点最多经过一次。此外,任意两个圈都不共享任何网格点。 最后结果显示,不位于画布边界上的 $(r-1) \cdot (c-1)$ 个内部网格点中,每一个都恰好被一个圈经过。以下是 $r=2, c=3$ 时的一些圈排列示例,图中高亮显示了内部网格点: ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF2181K/a9584afedf504a26ea33ba9a0b56e7e39848e97947c724b9270dc9a137d963a2.png) ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF2181K/54e9626673d89ecbe07af8479987615877d46c724377779cb57627c1146ef8a0.png) ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF2181K/cf43a1763a7bc434ca321928e23b575d95ff8a9501d6b80bc896098520b3dcef.png) 随后,她将画布留在地板上过夜。夜里,有 $r \cdot c$ 只绿色的青蛙跳上了画布,每个单元格里坐一只。但这只是女巫麻烦的开始!因为接着,老巫婆来到了画布前,一根接一根地拆掉了画布上所有编织好的线条。每当她拆掉两个相邻网格点之间的一段编织线段时,与该线段相邻的单元格中的青蛙就会受到惊吓(根据线段是否在边界上,会有 $1$ 只或 $2$ 只青蛙受惊)。当一只青蛙受惊时,它会立即改变颜色:如果它是绿色的,就会变成棕色;如果是棕色的,就会变回绿色。 如果圈的排列如上图所示,那么青蛙的颜色将如下所示(灰色单元格代表绿色青蛙,白色单元格代表棕色青蛙): ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF2181K/868c3ea209f69730662dd18465b6681684f65030280e1e30bf65e5cc07b7f2d2.png) ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF2181K/a27e20750965cb9942c4d85bf275ab4d4780e769e55d732158dc48756f3c978a.png) ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF2181K/821c5cfaea25aec8cbd6c10ad60b049e52a01d22fe6e77a6eba423ac36b6be70.png) 当伏都教女巫回到画布前时,她只看到画布上有两种颜色的青蛙,但编织的圈都不见了。根据给定的青蛙颜色排列,请判断它是否可能由上述过程产生;如果可能,请帮助女巫还原出一种可能的圈排列方案。

输入格式

每个测试包含多个测试用例。第一行包含测试用例的数量 $t$ ($1 \le t \le 10^4$)。 每个测试用例的第一行包含两个整数 $r$ 和 $c$,表示网格的尺寸 ($2 \le r, c \le 10^3$)。 接下来的 $r$ 行,每行包含一个由 $c$ 个字符 'G' 或 'B' 组成的字符串,分别代表绿色(Green)和棕色(Brown)的青蛙。 保证所有测试用例中 $r \cdot c$ 的总和不超过 $2 \cdot 10^6$。

输出格式

对于每个测试用例,如果给定的青蛙颜色可以由上述过程产生,则在第一行输出 `YES`,否则输出 `NO`。 如果答案为 `YES`,则额外输出 $2r+1$ 行由 $0$ 和 $1$ 字符组成的二进制字符串。 - 前 $r+1$ 行:每行长度为 $c$,表示水平网格线段。第 $i$ 行第 $j$ 个字符为 $1$ 表示对应的水平线段上有编织线,$0$ 表示没有。 - 后 $r$ 行:每行长度为 $c+1$,表示垂直网格线段。第 $i$ 行第 $j$ 个字符为 $1$ 表示对应的垂直线段上有编织线,$0$ 表示没有。

说明/提示

第一个测试用例是题目描述中第一个圈排列示例。 在第二个样例测试用例中,输出显示的方案在下方第一张图中给出。第二张图的圈排列也是正确的,而第三张图是错误的,因为有些网格点被多个圈共享。让网格留空也是不正确的,因为必须有圈经过所有内部网格点。 ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF2181K/b2be12dbe657955ba34184a8a171b2c6462a94a141063becb468bf6f7996e1a3.png) ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF2181K/5901f1cc452d65b308ed4ee42bf4b59b353d036f9ea65caff58addedbed8a9d7.png) ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF2181K/985f04d99080a8731a67ed2fb5e9087941e85e011bbfd5f0bcf6b551276733fd.png) 翻译由 Gemini3.0 flash 完成。