厌倦了秘密基地设计中的陷阱,你决定尝试一些经典但永远令人愉悦的东西——“旋转刀片”。你订购了一块非常重的金属板,并将在上面切割出刀片;一张均匀的 $C \times R$ 网格将被绘制在金属板上。你已经确定了刀片的最佳形状——你将首先切割出一个 $K \times K$ 的大正方形网格,其中 $K \ge 3$。然后,你将切掉正方形的四个 $1 \times 1$ 角落单元格,从而得到一个“刀片”。确定这一切后,你开始等待金属板送达。
当金属板送达时,你震惊地发现它存在瑕疵!你预期每个单元格的质量为 $D$,但由于厚度差异,实际质量会有所不同。这很糟糕,因为你想在刀片的中心插入一根轴并使其高速旋转,因此刀片的质心也必须正好位于其中心。平面物体的质心定义见下文。
给定网格和每个单元格的质量,你能切割出的质心正好位于其中心的刀片的最大尺寸是多少?
输入格式
输入的第一行包含测试用例的数量 $T$。接下来是 $T$ 个测试用例。每个测试用例的第一行包含 3 个整数:$R$、$C$ 和 $D$,分别表示网格的尺寸和你预期每个单元格应有的质量。接下来的 $R$ 行,每行包含 $C$ 个数字 $w_{ij}$,给出了网格单元格实际质量与预期质量的差值。每个单元格的密度是均匀的,但其质量为 $D + 0$ 到 $D + 9$ 之间的整数。
输出格式
对于每个测试用例,输出一行 "Case #x: $K$",其中 $x$ 是用例编号(从 1 开始),$K$ 是你能切割出的最大刀片尺寸。如果找不到尺寸至少为 3 的合格刀片,则输出 "IMPOSSIBLE"。
数据范围
$1 \le T \le 20$。 $0 \le w_{ij} \le 9$。 输入文件大小不超过 625KB。 内存限制:1GB。
小数据集(测试集 1 - 可见;8 分)
$3 \le R \le 10$。 $3 \le C \le 10$。 $1 \le D \le 100$。 时间限制:3 秒。
大数据集(测试集 2 - 隐藏;12 分)
$3 \le R \le 500$。 $3 \le C \le 500$。 $1 \le D \le 10^6$。 时间限制:6 秒。
样例
输入 1
2 6 7 2 1111111 1122271 1211521 1329131 1242121 1122211 3 3 7 123 234 345
输出 1
Case #1: 5 Case #2: IMPOSSIBLE
说明
二维物体的“质心”被正式定义为一个点 $c$。如果你计算物体中所有点 $p$ 的 $(p - c) \times \text{mass}(p)$ 之和,结果必须为 $0$。这里,$p$、$c$ 和 $0$ 都是二维向量。如果你将每个网格单元格视为一个“点”,并将所有质量集中在其中心,这个定义同样适用。
在现实生活中,你可以将手指放在平面物体的质心下方,从而使物体在手指上保持平衡,它不会掉落。
举个例子,在第二个样例测试用例中,唯一可能切割出的刀片是切掉四个角后的 $3 \times 3$ 刀片,其质心位于点 $(1.54, 1.46)$,假设金属板的左下角坐标为 $(0, 0)$,坐标分别向右和向上增长。这可以通过检查以下等式来验证:$(-1.04, 0.04) \times 9 + (-0.04, 1.04) \times 9 + (-0.04, 0.04) \times 10 + (-0.04, -0.96) \times 11 + (0.96, 0.04) \times 11 = (0, 0)$。