【問題G21】拼圖。            [回頁]

又到了機器人大賽的時間。為了讓自己設計的機器人能在大賽中獲得評審的青睞,參賽者無不攪盡腦汁,讓自己的機器人能有最特殊的功能。

身為拼圖迷的你最希望的就是做出能跟人比賽拼圖的機器人了。但是你很快地發現,讓機器人能判斷兩片拼圖上的圖案是否連續實在是件很困難的事情。所幸,機器人可以準確地分析拼圖四面的角或是缺口。縱使機器人無法辨別兩片拼圖的圖案是否連續,但一片拼圖的一個角能不能搭上另一片拼圖的一個缺口,機器人卻可以輕鬆判斷。憑藉著辨別拼圖的角和缺口的能力,你設計的機器人是否能和人一樣完成一幅拼圖呢?

輸入檔說明

輸入檔包含多筆的測試資料。

每一筆測試資料的第一行有兩個數字r c (1 <= r*c <= 252),分別表示拼圖的上到下的高一共是r片拼圖,左到右的寛度是c片拼圖。接下來一共有r*c行,每一行有8個字元,表示一片拼圖的資訊。前4個字元依序表示拼圖的左、上、右、下邊。大寫字母表示該邊為角,小寫字母表示該邊為缺口,一個減號則表示該邊是平的(表示這片拼圖是邊框中的其中一塊)。字母相同的角可以和缺口相接:例如1片拼圖的右側為A,另一片的左側為a,則兩片拼圖可以左右相接。

後4個字元則表示拼圖的圖案,圖案除了英文字母外也可能是空白字元。旋轉一片拼圖後,拼圖上的圖案看起來是不一樣的。因此4個字元分別表示拼圖四個方向的圖案。如果拼圖不需要旋轉,則該片拼圖的圖案即是後4個字元中的第1個。若拼圖需要順時針旋轉90度,則拼上拼圖的圖案則是第2個,再旋轉90度則是第3個,餘以類推。

第一片拼圖(每筆測試資料的第二行)一定剛好是最左上角的拼圖,其他拼圖的順序則不固定。你的機器人可以從第一片拼圖開始往後拼完整幅拼圖。除了第一片拼圖以外,其他拼圖可能需要先經過旋轉才能拼上去。為了讓大家清楚了解拼圖的表示法,下方的範例輸入資料第一筆為一個未被打亂的拼圖,拼圖的次序由左到右,由上到下。

當測試資料輸入的r和c皆為0時表示輸入檔結束,程式不需要對這一行輸入作處理。

輸出檔說明

對於每一筆測試資料,請將拼好的拼圖圖案輸出。每幅拼圖之後請輸出一個空行來作分隔。(你可以假設每幅拼圖只有一種拼法能完全拼圖。)

 

範例輸入

3 3

--CBOHPY

c-ccOX Y

C--AOCIG

-bbbOO O

BCaB  WA

Aa-BOTTU

-Ba-OEDA

AbA-OZRI

ab--ODRT

6 4

--wZXXKC

W-JC PGP

-JUPUDCG

tuTkYT R

WJtmRW I

Tw-IDPNP

jtKCYGAD

-wRlXFPN

Ty-WDXFE

NrFTG KN

teqJZC R

buVMXJOJ

-znW BJB

LRg-AQCD

--WlK KR

fNcBVXME

w-GQDDBC

Ej-LKQKD

--CSZBZX

Uj-sW NZ

wv-YXO O

c-VvOLU

rncjDM T

pi-- HVW

0 0

 

範例輸出

OOO

O O

OOO

 

X  X

 XX

X  X

DDDD

D  D

 DD