#icpc2012autumng. [icpc2012autumn_g]Ancient Commemorative Monolith

[icpc2012autumn_g]Ancient Commemorative Monolith

题目描述

在森林中的一天,爱丽丝发现了一个古老的石碑。

她调查了石碑,并发现上面写着一句用古老语言写成的句子。句子由字形和围绕它们的矩形构成。对于上面的例子,有以下字形。

注意,句子中的一些字形是水平翻转的。

她决定使用ASCII字母对其进行音译,将每个字形分配一个字母,并将[]分配给矩形。如果一个句子包含一个翻转的字形,她会从右到左进行音译。例如,她可以分别为上述字形分配ab。那么上面的句子将被音译为[[ab][ab]a]

检查完句子后,爱丽丝得出结论,该句子按以下结构进行组织:

  • 句子是由零个或多个组成的序列。
  • 可以是一个字形或一个。一个字形可以被翻转。
  • 是一个围绕的矩形。盒子的高度大于盒子内的任何字形。

现在,石碑上写的句子是一个非空的。序列中的每个项都适配在一个矩形边界框中,尽管未明确指定字形的边界框。相邻项的边界框之间没有重叠。爱丽丝将音译规则形式化如下。

ff为音译函数。

每个序列s=t1t2...tms = t_1 t_2 ... t_m可以从左到右或者从右到左进行书写。但是,请注意这里t1t_1对应于句子中最左边的项,t2t_2对应于第二个左边的项,依此类推。

gˉ为翻转的字形gg。当一个序列包含一个或多个单字形项,其需要翻转才能识读时,即存在一个整数ii,其中tit_i是单字形gg,而gg不在单独给出的字形字典中,而gˉ在其中。在这种情况下,f(s)f(s)定义为f(tm)f(tm1)...f(t1)f(t_m) f(t_{m-1}) ... f(t_1),否则f(s)=f(t1)f(t2)...f(tm)f(s) = f(t_1) f(t_2) ... f(t_m)。如果序列中存在一个或多个需要翻转才能识读的字形,则保证序列中的所有字形都被翻转。

如果项tit_i是一个围绕序列ss'的盒子,则f(ti)=f(t_i) = [ f(s)f(s') ]。如果项tit_i是字形gg,则f(ti)f(t_i)映射到与字形gg对应的字母,如果包含字形gg的序列是从右到左书写的,则映射到gˉ

请编写一个程序,将石碑上的句子音译,以帮助爱丽丝。


输入

输入由多个数据集组成,以两个由单个空格分隔的零表示结尾。

每个数据集的格式如下。

nn mm glyph1glyph_1 ... glyphnglyph_n string1string_1 ... stringmstring_m

nn1leqnleq261 \\leq n \\leq 26)是字形的数量,mm1leqmleq101 \\leq m \\leq 10)是石碑的数量。字形glyphiglyph_i按以下格式给出。

cc hh ww b11b_{11}...b1wb_{1w} ... bh1b_{h1}...bhwb_{hw}

cc是爱丽丝为字形分配的小写字母。hhww1leqhleq151 \\leq h \\leq 151leqwleq151 \\leq w \\leq 15)指定字形的位图的高度和宽度。矩阵bb表示位图。白色单元格用.表示,黑色单元格用*表示。

可以假设所有的字形都分配了不同的字符。可以假设位图的每一列至少包含一个黑色单元格,并且位图的第一行和最后一行至少包含一个黑色单元格。每个位图互不相同,但可能存在一个翻转的位图与另一个位图相同。此外,可能存在对称位图。

stringistring_i按以下格式给出。

hh ww b11b_{11}...b1wb_{1w} ... bh1b_{h1}...bhwb_{hw}

hhww1leqhleq1001 \\leq h \\leq 1001leqwleq10001 \\leq w \\leq 1000)是序列的位图的高度和宽度。与字形字典类似,bb表示位图,其中白色单元格用.表示,黑色单元格用*表示。

没有噪声:位图中的每个黑色单元格都属于一个字形或一个矩形盒子。矩形的高度至少为3,大于最高字形的高度。矩形的宽度至少为3。

一个矩形必须在其边缘周围有1像素的空白。

可以假设字形永远不会垂直排列。此外,可以假设如果两个矩形或一个矩形和一个字形在同一列,那么其中一个包含另一个。对于字形的边界框和矩形的黑色单元格,每两个之间至少有一个白色单元格。可以假设位图中至少有一个黑色单元格。

输出

对于每个石碑,在一行中输出音译后的句子。在输出一个数据集后,在一行中输出#


示例输入


2 1
a 11 9
****.....
.*.*.....
.*.*.....
.*..*....
.**..*...
..**..*..
..*.*....
..**.*.*.
..*..*.*.
..*****.*
******.**
b 10 6
....*.
....*.
....*.
....*.
....*.
....*.
....*.
....*.
.**..*
*****.
19 55
*******************************************************
*.....................................................*
*.********************.********************...........*
*.*..................*.*..................*...........*
*.*.****.............*.*.............****.*.****......*
*.*..*.*..........*..*.*..*..........*.*..*..*.*......*
*.*..*.*..........*..*.*..*..........*.*..*..*.*......*
*.*..*..*.........*..*.*..*.........*..*..*..*..*.....*
*.*..**..*........*..*.*..*........*..**..*..**..*....*
*.*...**..*.......*..*.*..*.......*..**...*...**..*...*
*.*...*