一家著名的微处理器公司邀请你帮助他们在一些计算机芯片上布置一些可互换的组件(小部件)。每个芯片的设计都是一个 $N \times N$ 的方格阵列。一个格子可以容纳一个组件,你需要尽可能多地放入小部件。
当然,现代处理器设计非常复杂。不幸的是,你面临以下几个限制:
- 有些格子是禁用的。
- 有些格子已经被其他组件占用,不能用于放置小部件。
- 芯片的水平边缘和垂直边缘连接着同级内存总线,它们的带宽负载需要匹配。因此,第一行中的组件数量必须与第一列中的组件数量完全相等,第二行与第二列也必须相等,依此类推。组件计数包括芯片上已有的组件和新添加的小部件。
- 同样,电源连接在每一行和每一列的末端。为了避免热点,对于给定的 $A$ 和 $B$,任何一行或一列的组件数量都不能超过芯片上总组件数量的 $A/B$。
芯片的规格由 $N$ 行 $N$ 个字符表示,其中 ‘.’ 表示空闲格子,‘/’ 表示禁用格子,‘C’ 表示已被组件占用的格子。例如:
CC/.. ./.// ..C.C /.C.. /./C/
如果任何一行或一列中的组件占比不超过 $3/10$,则在这个 $5 \times 5$ 的芯片上最多可以添加 $7$ 个小部件。一种可能的排列如下,其中 ‘W’ 表示在空闲格子中添加的小部件:
CC/W. W/W// W.C.C /.CWW /W/C/
输入格式
输入包含多个测试用例。每个用例的第一行包含三个整数:芯片大小 $N$ ($1 \le N \le 40$),以及上述的 $A$ 和 $B$ ($1 \le B \le 1000, 0 \le A \le B$)。接下来的 $N$ 行,每行包含 $N$ 个字符,描述了格子的状态,字符为 ‘.’、‘/’ 或 ‘C’ 中的一种。
最后一个测试用例后跟一行包含三个零的输入。
输出格式
对于每个测试用例,输出一行,以用例编号开头。如果有解,输出可以添加到芯片上的最大小部件数量。如果无解,输出 “impossible”。
请遵循样例输出的格式。
样例
输入 1
2 1 1 /. // 2 50 100 /. C/ 2 100 100 ./ C. 5 3 10 CC/.. ./.// ..C.C /.C.. /./C/ 5 2 10 CC/.. ./.// ..C.C /.C.. /./C/ 0 0 0
输出 1
Case 1: 0 Case 2: 1 Case 3: impossible Case 4: 7 Case 5: impossible