Joy 即将去度长假,因此她雇佣了技术人员安装了一套基于红外激光束的安防系统。技术人员给了她一张图,将她的房子表示为一个有 $R$ 行 $C$ 列单元格的网格。网格中的每个单元格包含以下内容之一:
/:一个双面镜,从单元格的左下角延伸到右上角。\:一个双面镜,从单元格的左上角延伸到右下角。-:一个光束发射器,向该单元格左侧和右侧的单元格(如果有)发射水平光束。|:一个光束发射器,向该单元格上方和下方的单元格(如果有)发射垂直光束。#:一堵墙。(注意,房子不一定被墙壁包围;这也是 Joy 需要安防系统的原因之一!).:什么都没有;该单元格为空。
光束沿直线传播,并穿过空单元格。当光束击中镜子时,它会从镜面反射 90 度并继续传播。当向右传播的光束击中 / 镜子时,它会反射并开始向上传播;向上、向左或向下传播的光束击中 / 镜子时,会分别向右、向下或向左反射。\ 镜子的行为类似:当向右、向上、向左或向下传播的光束击中它时,它会分别向下、向左、向上或向右反射。当光束击中墙壁或超出网格边界时,它会停止。光束穿过其他光束是可以的,但如果光束击中任何光束发射器(包括可能发射该光束的发射器本身),该发射器就会被摧毁!
Joy 希望确保房子里的每个空单元格至少有一束光束穿过,并且没有光束发射器被摧毁,因为那纯粹是浪费钱!不幸的是,技术人员已经安装好了系统,所以 Joy 最多只能将现有的光束发射器旋转 90 度。也就是说,对于任意数量(包括零)的光束发射器,她可以将 - 变为 |,反之亦然。
你能为 Joy 找到实现她目标的方法,或者确定这是不可能的吗?注意,不需要最小化光束发射器的旋转次数。
输入格式
输入的第一行给出测试用例的数量 $T$。接下来是 $T$ 个测试用例。每个测试用例的第一行包含两个整数 $R$ 和 $C$:表示房子的网格行数和列数。接下来是 $R$ 行,每行包含 $C$ 个字符;每个字符为 /、\、-、|、# 或 .,如题目所述。
输出格式
对于每个测试用例,输出一行 Case #x: y,其中 $x$ 是测试用例编号(从 1 开始),如果 Joy 无法实现她的目标,则 $y$ 为 IMPOSSIBLE,如果可以,则为 POSSIBLE。然后,如果该情况可行,输出与输入网格相同的 $R$ 行 $C$ 个字符,其中零个或多个 - 被替换为 |,反之亦然。
如果有多个可能的答案,你可以输出其中任何一个。
数据范围
时间限制:每个测试集 20 秒。
内存限制:1 GB。
$1 \le T \le 100$。
$1 \le C \le 50$。
网格中的每个字符均为 /、\、-、|、# 或 .。
网格中 - 字符的数量加上 | 字符的数量(即光束发射器的数量)在 1 到 100 之间(含)。
网格中至少有 1 个 . 字符(即空空间)。
小型数据集(测试集 1 - 可见)
$1 \le R \le 5$。
网格中没有 / 或 \ 字符(即没有镜子)。
大型数据集(测试集 2 - 隐藏)
$1 \le R \le 50$。
样例
输入 1
5 1 3 -.- 3 4 #.## #--# #### 2 2 -. #| 4 3 .|. -// .-. #\/ 3 3 /|\ \\/ ./#
输出 1
Case #1: IMPOSSIBLE Case #2: POSSIBLE #.## #||# #### Case #3: POSSIBLE |. #| Case #4: POSSIBLE .-. |// .|. #\/ Case #5: IMPOSSIBLE
说明
注意,最后 2 个样例不会出现在小型数据集中。
在样例 1 中,如果将光束发射器放置为向空单元格发射光束,它必然会摧毁另一个光束发射器。因此该情况为 IMPOSSIBLE。
在样例 2 中,最左侧的光束发射器必须旋转以覆盖空单元格。最右侧的光束发射器也必须旋转以避免摧毁最左侧的光束发射器。
在样例 3 中,现有的光束发射器已经用它们的光束覆盖了所有空单元格,并且不会互相摧毁,因此输出输入中的网格是可以接受的。然而,请注意我们给出的输出也是正确的。
在样例 4 中,一种可接受的解决方案是旋转所有三个光束发射器。然而,请注意以下输出也是可接受的:
.-. |// .-. #\/
因为对于有镜子的单元格,不需要有光束穿过。(毕竟,谁会去偷巨大的对角线镜子呢?)
在样例 5 中,无论 Joy 选择哪种方向,光束发射器都会摧毁它自己,因此该情况为 IMPOSSIBLE。