你正身处珠穆朗玛峰的山坡上。天色已晚,你必须在冻僵之前找到避难所!你该怎么办?
好消息是,你已经记住了这座山的布局。它是一个网格,其中某些方格无法通行,而另一些方格包含可以让你过夜的洞穴。坏消息是你不知道自己身在何处,而且山势太陡,无法向上攀爬。你唯一能做的就是向左、向右或向下移动。
以下是一个布局示例,其中 '.' 代表可通行的方格,'#' 代表无法通行的方格,数字代表洞穴。
###### ##...# #..#.# #...## #0#..# ####1# ######
由于天色很暗,你将通过遵循一个计划来移动,该计划是一系列指令,每条指令告诉你向左、向右或向下移动一个方格。如果一条指令会将你带到一个可通行的方格或洞穴,你就会执行它。如果它会将你带到一个无法通行的方格,你将忽略该指令。无论哪种情况,你都会继续执行下一步,依此类推,直到执行完整个计划。
为了帮助你下山,你需要为每个洞穴 C 找出两件事:
- 从哪些方格可以到达 C?我们将这些方格的集合标记为 SC,并将它们的数量标记为 nC。
- 是否存在一个计划,使得从 SC 中的任何方格出发并遵循该计划后,最终都会停在洞穴 C?如果存在,我们称该洞穴为幸运的 (lucky)。
注意,在执行计划的过程中,你可能会经过几个洞穴。唯一重要的是执行完所有步骤后你最终停留在哪个方格,而不是沿途访问了哪些洞穴。
例如,在上面的布局中,洞穴 0 是幸运的。有 9 个方格可以到达它(包括它自身),并且计划 "left-left-down-down-left-down" 会让你从这些方格中的任何一个出发,最终都停在该洞穴。
输入格式
输入的第一行给出了测试用例的数量 T。接下来是 T 个测试用例,每个测试用例的第一行包含整数 R 和 C,分别代表山地布局的行数和列数。
随后是 R 行,每行包含 C 个字符,描述山地布局。如上例所示,'#' 字符代表无法通行的方格,'.' 字符代表可通行的方格,数字 '0'-'9' 代表洞穴(它们也是可通行的方格)。
输出格式
对于每个测试用例,首先输出一行 "Case #x:",其中 x 是用例编号(从 1 开始)。对于每个洞穴 C(从 0 开始向上计数),写一行 "C: nC LC"。这里,C 是洞穴编号,nC 是你可以到达该洞穴的方格数量,LC 是字符串 "Lucky" 或 "Unlucky",定义如上。
数据范围
内存限制:1GB。 时间限制:8 秒。 洞穴数量在 1 到 10 之间(含)。 如果有 d 个洞穴,它们将用数字 {0, 1, ..., d - 1} 标记,且没有两个洞穴具有相同的标签。 山地布局边界上的所有方格都将是无法通行的。 1 ≤ T ≤ 20。
子任务 1
3 ≤ R, C ≤ 10。
子任务 2
3 ≤ R, C ≤ 60。
样例
输入 1
2 7 5 ##### ##0## ##1.# ##2## #3..# #.#.# ##### 7 6 ###### ##...# #..#.# #...## #0#..# ####1# ######
输出 1
Case #1: 0: 1 Lucky 1: 3 Lucky 2: 4 Unlucky 3: 7 Lucky Case #2: 0: 9 Lucky 1: 11 Unlucky
说明
在第一个用例中,以下是一些你可以用于幸运洞穴的有效计划:
- 对于洞穴 0,你可以使用空计划。如果你能到达该洞穴,说明你已经在正确的位置了!
- 对于洞穴 1,你可以使用计划 right-down-left。
- 对于洞穴 3,你可以使用计划 right-right-left-down-down-down-left。