Infinite House of Pancakes 的食客们已经厌倦了圆形煎饼,所以厨师们准备推出一种新的菜单选项:华夫饼!作为一种宣传噱头,他们制作了一块巨大的华夫饼,它是一个由 $R$ 行和 $C$ 列方格组成的网格。华夫饼的每个单元格要么是空的,要么包含一颗巧克力豆。
现在是厨师们将华夫饼分给饥肠辘辘的食客们的时候了。水平切割线沿着两行之间的整个网格线进行;垂直切割线沿着两列之间的整个网格线进行。为了提高效率,一位厨师将进行恰好 $H$ 次不同的水平切割,另一位厨师将进行恰好 $V$ 次不同的垂直切割。这将方便地为 $(H + 1) \times (V + 1)$ 位食客每人创造一块华夫饼。这些碎片的大小不一定完全相等,但这没关系;市场调查显示食客们并不在意这一点。
食客们真正在意的是他们得到的巧克力豆数量,因此每一块华夫饼必须包含完全相同数量的巧克力豆。你能确定厨师们是否可以使用给定的水平和垂直切割次数来实现这一目标吗?
输入格式
输入的第一行包含测试用例的数量 $T$;接下来是 $T$ 个测试用例。每个测试用例的第一行包含四个整数 $R, C, H$ 和 $V$:华夫饼的行数和列数,以及厨师必须进行的水平和垂直切割的精确次数。接下来有 $R$ 行,每行包含 $C$ 个字符;第 $i$ 行的第 $j$ 个字符表示华夫饼中第 $i$ 行第 $j$ 列的单元格。每个字符要么是 @,表示该单元格有一颗巧克力豆,要么是 .,表示该单元格为空。
输出格式
对于每个测试用例,输出一行 Case #x: y,其中 $x$ 是测试用例编号(从 1 开始),如果厨师能够按照上述要求完成目标,则 $y$ 为 POSSIBLE,否则为 IMPOSSIBLE。
数据范围
$1 \le T \le 100$。 $2 \le R \le 100$。 $2 \le C \le 100$。 $1 \le H < R$。 $1 \le V < C$。
样例
样例输入 1
6 3 6 1 1 .@@..@ .....@ @.@.@@ 4 3 1 1 @@@ @.@ @.@ @@@ 4 5 1 1 ..... ..... ..... ..... 4 4 1 1 ..@@ ..@@ @@.. @@.. 3 4 2 2 @.@@ @@.@ @.@@ 3 4 1 2 .@.@ @.@. .@.@
样例输出 1
Case #1: POSSIBLE Case #2: IMPOSSIBLE Case #3: POSSIBLE Case #4: IMPOSSIBLE Case #5: POSSIBLE Case #6: IMPOSSIBLE
说明
注意最后两个样例在测试集 1 中不会出现。
在样例 1 中,一种可能的策略是在从上往下数第二行和第三行之间进行水平切割,并在从左往右数第四列和第五列之间进行垂直切割。这会产生以下碎片,每一块都恰好有两颗巧克力豆:
.@@. .@ .... .@ @.@. @@
在样例 2 中,无论你在哪里进行水平切割和垂直切割,你都会创造出巧克力豆数量不等的碎片,因此该情况是不可能的。
在样例 3 中,华夫饼中没有巧克力豆。任何切割策略产生的碎片都具有相同数量的巧克力豆(零),所以食客们很高兴……但可能没有得到巧克力豆时那么高兴!
在样例 4 中,就像样例 2 一样,无论你在哪里进行水平切割和垂直切割,你都无法成功。
在样例 5 中,厨师可以进行仅有的两次可能的水平切割,并将两次垂直切割分别放在第一列和第三列的右侧。
尽管样例 6 对于其他数量的水平和垂直切割可能是可能的,但请记住,你必须使用恰好 $H$ 次水平切割和恰好 $V$ 次垂直切割。无论你在哪里进行那一次水平切割和两次垂直切割,你都无法成功。