洞穴着火了,到处都是烟!你正试图挖出一条路到达洞穴底部,那里可以呼吸。问题是洞穴里有一些气孔,你不能坠落太远,否则会受伤。
洞穴被表示为一个 $R \times C$ 的矩阵,包含气孔和坚硬的岩石单元格。你从左上角的 $(1, 1)$ 位置开始。 你可以一次向左或向右移动一个单元格,前提是该单元格是空的(气孔)。移动后,如果下方的单元格是空的,你会向下坠落,直到撞到坚硬的岩石或到达洞穴底部。坠落距离必须最多为 $F$,否则你会受伤。你必须在不受伤的情况下到达洞穴底部。在坠落过程中,你不能向左或向右移动。
你也可以进行“挖掘”,将一个包含坚硬岩石的单元格变成气孔。你可以挖掘的单元格有两个:你右下方的单元格,或你左下方的单元格。你正在挖掘的单元格上方必须是空的。在坠落过程中,你不能挖掘。
你的目标不仅是到达洞穴底部,还要使“挖掘”的单元格数量尽可能少。
让我们用一个具体的例子来描述这些操作:
你从 $(1, 1)$ 开始,向右移动 3 次到达 $(1, 4)$ 位置,如图所示。
你挖掘 $(2, 5)$ 位置的岩石。单元格 "A" 变为空。
你向右移动一个位置,由于下方没有单元格,你坠落 3 个单元格到达 $(4, 5)$。 你挖掘 $(5, 6)$ 位置的岩石。单元格 "B" 变为空。
你向右移动一个位置,由于下方没有单元格,你坠落 1 个单元格到达 $(5, 6)$。
你通过挖掘 2 个单元格到达了洞穴底部。
输入格式
输入的第一行包含测试用例的数量 $N$。接下来是 $N$ 个测试用例。 每个测试用例的第一行格式为:
R C F
其中 $R$ 是洞穴的行数,$C$ 是洞穴的列数,$F$ 是你坠落而不受伤的最大距离。
接下来是 $R$ 行,每行包含 $C$ 个字符。每个字符可以是以下两种之一:
#表示坚硬的岩石.表示气孔
左上角的单元格始终为空,其下方的单元格始终为坚硬的岩石。
输出格式
对于每个测试用例,输出一行,格式为:
Case #X: No/Yes [D]
其中 $X$ 是测试用例编号,从 1 开始。如果你无法到达洞穴底部,输出 "No"。如果可以到达洞穴底部,输出 "Yes D",其中 $D$ 是需要挖掘的最少单元格数量。
数据范围
$1 \le N \le 50$
$1 \le F < R$
小数据集
$2 \le R \le 10$
$2 \le C \le 6$
大数据集
$2 \le R \le 50$
$2 \le C \le 50$
样例
输入 1
3 2 2 1 .# ## 3 3 1 ... ### ### 3 2 1 .. #. ..
输出 1
Case #1: No Case #2: Yes 3 Case #3: No