1110. 纵横字谜的答案

输入一个 rc 列的网格,黑格用 * 表示,每个白格都填有一个字母。如果一个白格的左边相邻位置或者上边相邻位置没有白格(可能是黑格,也可能出了网格边界),则称这个白格是一个起始格。

首先把所有起始格按照从上到下、从左到右的顺序编号为 1,2,3,...

接下来要找出所有横向单词(Across)。这些单词必须从一个起始格开始,向右延伸到一个黑格的左边或者整个网格的最右列。最后找出所有竖向单词(Down)。这些单词必须从一个起始格开始,向下延伸到一个黑格的上边或者整个网格的最下行。

输入

输入中的每个拼图解决方案以包含两个整数 r,c \ (1 \leq r,c \leq 10) 的行开始,其中第一个数字 r 是拼图中的行数,第二个数字 c 是列数。

随后的 r 行输入包含描述解决方案的 c 个字符(不包括行尾)。这些 c 个字符中的每一个都是一个字母或表示黑色方块的字符 *

输入结束由单个数字 0 组成的行表示。

输出

每个拼图的输出包括拼图的标识符(puzzle #1puzzle #2 等)以及随后的单词列表。每个列表中的单词必须按照相应定义数量的增加顺序逐行输出。

跨越单词列表的标题是 Across。 下降单词列表的标题是 Down

在列表为空的情况下(网格中的所有正方形都为黑色),AcrossDown 标题仍应显示。

如果有多个谜题,谜题与谜题直接应有一个空白行,详见样例。

样例

标准输入 复制文本
2 2
AT
*O
6 7
AIM*DEN
*ME*ONE
UPON*TO
SO*ERIN
*SA*OR*
IES*DEA
0
标准输出 复制文本
puzzle #1:
Across
  1.AT
  3.O
Down
  1.A
  2.TO

puzzle #2:
Across
  1.AIM
  4.DEN
  7.ME
  8.ONE
  9.UPON
 11.TO
 12.SO
 13.ERIN
 15.SA
 17.OR
 18.IES
 19.DEA
Down
  1.A
  2.IMPOSE
  3.MEO
  4.DO
  5.ENTIRE
  6.NEON
  9.US
 10.NE
 14.ROD
 16.AS
 18.I
 20.A
登录以提交代码。
单点时限 1 秒
内存限制 128 MB
提交 134
通过 42