Problem F

Korsord

Källkod: korsord.*

Ett litet korsord Konrad tycker mycket om att lösa korsord. Han brukar ofta skicka in lösningarna till tidningarna, och ibland vinner han priser. Men han tycker att de här korsorden med tal, sk Krypton, är tråkiga. I sådana korsord ges egentligen lösningen direkt, fast man vet inte om det, eftersom den är krypterad. Varje bokstav är nämligen utbytt mot ett unik tal. Ibland får man vet vilka bokstäver som står bakom några tal, men inte alltid.

Titta på korsordet till höger. 1=S och 2=O och 3=T. Med lite funderande kan man tänka sig att 4=A, 5=X och 6=Y. Det beror förstås på vilka ord som är korrekta. Som tur var så har Konrad sammanställt en lista på sådana ord.

Konrad vill ha ett program som, utifrån korsordets talrepresentation och vilka ord som finns i korsordet, en ordlista och eventuella givna bokstäver, räknar ut alla tals bokstäver. Konrad garanterar att utifrån indata finns det alltid exakt en lösning till korsordet.

Indata
Indata inledes med ett positivt heltal N på en egen rad som anger antalet korsord. Därefter följer de N korsorden. Varje korsord inleds med en lista med godkända ord, var och ett på en egen rad. Orden är på 1-20 bokstäver vardera, och består av de stora bokstäverna A-Ö. Listan avslutas med tecknet # på en egen rad. Listan kan innehålla upp till 1000 ord, så det är viktigt att ert program är effektivt. Därefter följer heltalen r och k på en rad, åtskiljda av mellanslag. r står för antalet rader i korsordet, k för antalet kolumner. 0 < r,k < 21. Därefter följer r rader med k heltal på varje, åtskiljda av mellanslag. Varje heltal är mellan 0 och 29, inklusive, där 0 står för en svart ruta och 1 till och med 29 står för någon bokstav. Efter de r raderna följer ett heltal o på en egen rad. Detta tal står för hur många ord som finns i korsordet. Efter denna rad följer o rader. Varje rad innehåller en av bokstäverna V eller L för vågrät respektive lodrät. Tecknet följs av mellanslag och sedan tre heltal, åtskiljda av mellanslag. Det första två talen anger koordinaterna ((rad, kolumn), övre vänstra hörnet är (1,1)) och det tredje talet är längden på ordet. Eter dessa rader följer ett heltal b på en egen rad. Detta tal står för hur många bokstäver som är kända. Efter denna rad kommer b rader av kända bokstäver på formen heltal=bokstav .

Utdata
För varje korsord skall det finnas en rad för varje tal (bokstav) som finns med i korsordet. Raderna ska ha formatet heltal=bokstav och skall vara i stigande nummerordning. Efter dessa rader skall tecknet # skrivas ut på en egen rad.

Exempel

Indata:       Utdata:
2             1=S
OST           2=O
SAX           3=T
YXA           4=A
EKA           5=X
#             6=Y
3 3           #  
2 1 3         1=L
0 4 0         2=U
6 5 4         3=N
3             4=D
V 1 1 3       5=M
L 1 2 3       6=E
V 3 1 3       8=Å
3	      #  
2=O
1=S
3=T
VISBY
MALMÖ
KRISTIANSTAD
KARLSKRONA
KALMAR
VÄXJÖ
JÖNKÖPING
BORÅS
GÖTEBORG
UDDEVALLA
SKÖVDE
LINKÖPING
KARLSTAD
ÖREBRO
VÄSTERÅS
ESKILSTUNA
UPPSALA
STOCKHOLM
BORLÄNGE
FALUN
GÄVLE
SUNDSVALL
HÄRNÖSAND
ÖSTERSUND
UMEÅ
LUND
LULEÅ
HALMSTAD
RONNEBY
TROLLHÄTTAN
KARLSTAD
#
5 5
0 0 1 0 0
0 1 2 3 4
0 0 1 0 0
2 5 6 8 0
0 0 8 0 0
3
L 1 3 5
V 2 2 4
V 4 1 4
0