고대 기념비

아직 제출이 없습니다시간 제한8초메모리 제한256 MB

문제

앨리스는 숲에서 오래된 비석을 발견했다. 비석에 새겨진 문장은 옛 언어로 적혀 있다. 문장은 글리프와 글리프를 둘러싼 직사각형으로 이루어지고, 문장 안에는 좌우로 뒤집힌 글리프도 섞여 있다.

앨리스는 문장을 아스키 문자로 옮겨 적기로 했다. 사전에 실린 글리프마다 소문자 하나를 배정하고, 직사각형은 []로 적는다. 문장에 뒤집힌 글리프가 들어 있으면 그 문장은 오른쪽에서 왼쪽으로 읽는다.

문장은 다음 구조를 따른다.

  • 문장 <seq><term>을 0개 이상 나열한 것이다.
  • <term>은 글리프이거나 <box>다. 글리프는 뒤집혀 있을 수 있다.
  • <box><seq>를 둘러싼 직사각형이다. 상자의 높이는 그 안에 있는 어떤 글리프보다도 크다.

비석에 새겨진 문장은 비어 있지 않은 <seq>다. 나열된 각 항은 직사각형 경계 상자에 들어가지만 글리프의 경계 상자는 그려져 있지 않다. 이웃한 두 항의 경계 상자는 서로 겹치지 않는다.

음역 함수를 ff라고 하자. 수열 s=t1t2tms = t_1 t_2 \dots t_m은 왼쪽에서 오른쪽으로 적혀 있거나 오른쪽에서 왼쪽으로 적혀 있다. 어느 쪽이든 t1t_1은 문장에서 가장 왼쪽에 있는 항이고, t2t_2는 왼쪽에서 두 번째 항이며, 나머지도 같은 방식으로 센다.

글리프 gg를 뒤집은 글리프는 g˙\dot{g}로 쓴다. 뒤집지 않으면 읽을 수 없는 글리프 항이 수열에 하나라도 있으면, 다시 말해 tit_i가 글리프 하나 gg이면서 gg는 글리프 사전에 없고 g˙\dot{g}는 사전에 있는 정수 ii가 존재하면 그 수열은 오른쪽에서 왼쪽으로 적힌 것이다. 이때 f(s)=f(tm)f(tm1)f(t1)f(s) = f(t_m) f(t_{m-1}) \dots f(t_1)이고, 그렇지 않으면 f(s)=f(t1)f(t2)f(tm)f(s) = f(t_1) f(t_2) \dots f(t_m)이다. 뒤집지 않으면 읽을 수 없는 글리프가 하나라도 있는 수열은 그 안의 글리프가 모두 뒤집혀 있다.

tit_i가 수열 ss'을 둘러싼 상자면 f(ti)=f(t_i) = [ f(s)f(s') ]이다. 항 tit_i가 글리프 ggf(ti)f(t_i)gg에 배정된 문자이고, gg가 속한 수열이 오른쪽에서 왼쪽으로 적혀 있으면 g˙\dot{g}에 배정된 문자다.

비석에 새겨진 문장을 음역하는 프로그램을 작성하라.

입력

입력은 여러 개의 데이터 집합으로 이루어진다. 공백 하나로 구분된 0 두 개가 입력의 끝을 나타낸다.

각 데이터 집합의 형식은 다음과 같다.

n m
glyph1
...
glyphn
string1
...
stringm

nn (1n261 \leq n \leq 26)은 글리프의 개수, mm (1m101 \leq m \leq 10)은 비석의 개수다. 각 glyphiglyph_i의 형식은 다음과 같다.

c h w
b11...b1w
...
bh1...bhw

cc는 앨리스가 그 글리프에 배정한 소문자다. hhww (1h151 \leq h \leq 15, 1w151 \leq w \leq 15)는 글리프 비트맵의 높이와 너비다. 행렬 bb가 비트맵이며 흰 칸은 ., 검은 칸은 *로 나타낸다.

글리프에 배정된 문자는 서로 다르다. 글리프 비트맵의 모든 열에는 검은 칸이 하나 이상 있고, 첫 행과 마지막 행에도 검은 칸이 하나 이상 있다. 글리프 비트맵은 서로 모두 다르지만, 어떤 비트맵을 뒤집은 결과가 다른 비트맵과 같을 수 있고 좌우 대칭인 비트맵도 있을 수 있다.

stringistring_i의 형식은 다음과 같다.

h w
b11...b1w
...
bh1...bhw

hhww (1h1001 \leq h \leq 100, 1w10001 \leq w \leq 1000)는 문장 비트맵의 높이와 너비다. 글리프 사전과 마찬가지로 bb가 비트맵이고 흰 칸은 ., 검은 칸은 *다.

비트맵에는 잡음이 없다. 검은 칸은 모두 글리프 하나 또는 직사각형 하나에 속한다. 직사각형의 높이는 3 이상이고 사전에서 가장 높은 글리프의 높이보다 크다. 직사각형의 너비는 3 이상이다. 상자는 테두리 안쪽에 흰 칸 한 줄의 여백을 둔다.

글리프가 세로로 쌓이는 일은 없다. 직사각형 두 개, 또는 직사각형과 글리프가 같은 열을 차지하면 둘 중 하나가 나머지를 포함한다. 글리프의 경계 상자와 직사각형의 검은 칸 가운데 어느 두 개 사이에도 흰 칸이 하나 이상 있다. 비트맵에는 검은 칸이 하나 이상 있다.

출력

비석마다 음역한 문장을 한 줄에 출력한다. 한 데이터 집합의 출력이 끝나면 #을 한 줄에 출력한다.