eolymp
bolt
Попробуйте наш новый интерфейс для отправки задач
Задачи

C(O|W|A*RD*|S)* CROSSWORD Puzzle

C(O|W|A*RD*|S)* CROSSWORD Puzzle

Первый кроссворд был опубликован 21 декабря 1913 г. Артуром Винном. В рамках празднования столетия со дня изобретения своего двоюродного прадеда, Джон "Трус" Винн-1 изо всех сил пытался сделать кроссворды. Он был таким боязливым, что всякий раз, когда думал о хитрой подсказке для слова, не переставал беспокоиться как бы люди не винили его за ее плохой выбор. В конце дня он наконец выбрал скучные подсказки для слов, которые сделали его загадки менее интересными. Однажды у него возникла блестящая идея: создать головоломку, в которой смысл слов не имеет значения, но которая все еще будет интересной. Он рассказал эту идею своим коллегам, которые признали ее достаточно интригующей. Они даже назвали его головоломки "Кроссворды Труса" согласно его прозвищу. Однако делать кроссворд Труса оказалось нелегко. Несмотря на то, что не следует думать о значениях слов, не так легко было проверить, имеет ли головоломка только один набор ответов. Когда день столетнего юбилея приближался, Джон начал беспокоиться о том, в состоянии ли он создать хоть что-нибудь интересное вовремя. Давайте поможем Джону написать программу, которая решает кроссворды Труса. Каждая головоломка состоит из \textbf{h }× \textbf{w} ячеек, содержащая \textbf{h} горизонтальных ключей и \textbf{w} вертикальных. Ключами (clue) являются регулярные выражения, записанные в языке, который определяется следующим синтаксисом БНФ. \includegraphics{https://static.e-olymp.com/content/fb/fb660fc555dce28bbc663caa7ab1a1e674ee2c5d.jpg} \textit{\textbf{Таблица 1}}. \textbf{БНФ} синтаксис языка. Ключи (обозначаются ниже через \textbf{p} и \textbf{q}) соответствуют словам (обозначается ниже через \textbf{s}) согласно следующим правилам. \begin{itemize} \item \textbf{^p\$} соответствует \textbf{s} если \textbf{p} соответствует \textbf{s}. \item \textbf{p|q} соответствует строке \textbf{s} если \textbf{p} и/или \textbf{q} соответствует \textbf{s}. \item \textbf{pq} соответствует строке \textbf{s} если существуют такие \textbf{s_1} и \textbf{s_2}, что \textbf{s_1s_2 = s}, \textbf{p} соответствует \textbf{s_1}, и \textbf{q} соответствует \textbf{s_2}. \item \textbf{p*} соответствует строке \textbf{s} если \textbf{s} пусто, или существуют такие \textbf{s_1} и \textbf{s_2}, что \textbf{s_1s_2} = \textbf{s}, \textbf{p }соответствует \textbf{s_\{1 \}}и \textbf{p*} сосоответствует \textbf{s_2}. \item Каждый из символов \textbf{A}, \textbf{B}, ..., \textbf{Z} соответствует своей же букве. \item \textbf{(p)} соответствует \textbf{s} елси \textbf{p} соответствует \textbf{s}. \item \textbf{.} является сокращением (\textbf{A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z}). \end{itemize} Below is an example of a Coward’s crossword puzzle with the answers filled in the cells. \includegraphics{https://static.e-olymp.com/content/7b/7b13139463abd4a878f5ad6b2b7cffc2c7bf062e.jpg} \textit{\textbf{Java Specific}}: Submitted Java programs may not use classes in the java.util.regex package. \textit{\textbf{C++ Specific}}: Submitted C++ programs may not use the std::regex class. _________________ ^1All characters appearing in this problem, except for Arthur Wynne, are fictitious. Any resemblance to real persons, living or dead, is purely coincidental. \InputFile The input consists of multiple datasets, each of which represents a puzzle given in the following format. \textbf{h w} \textbf{p_1} \textbf{p_2} \textbf{...} \textbf{p_h} \textbf{q_1} \textbf{q_2} \textbf{...} \textbf{q_w} Here, \textbf{h} and \textbf{w} represent the vertical and horizontal numbers of cells, respectively, where \textbf{2} ≤ \textbf{h}, \textbf{w} ≤ \textbf{4}. The \textbf{p_i} and \textbf{q_j} are the across and down clues for the \textbf{i}-th row and \textbf{j}-th column, respectively. Any clue has no more than \textbf{512 }characters. The last dataset is followed by a line of two zeros. You may assume that there are no more than \textbf{30} datasets in the input. \OutputFile For each dataset, when the puzzle has a unique set of answers, output it as \textbf{h} lines of \textbf{w} characters. When the puzzle has no set of answers, or more than one set of answers, output "\textbf{none}" or "\textbf{ambiguous}" without double quotations, respectively.
Лимит времени 90 секунд
Лимит использования памяти 256 MiB
Входные данные #1
2 2
^(C|I|T|Y)*$
^(C|O|P|S)*$
^(F|L|I|P)*$
^(B|A|C|K)*$
2 2
^HE|LL|O*$
^(P|L|E|A|S|E)*$
^(H|L)*$
^EP|IP|EF$
4 4
^LONG|TALL|S*ALLY$
^(R*EV*|OL*U(TIO)*N)*$
^(STRAWBERRY|F*I*E*L*D*S*|FOREVER)*$
^P.S.|I|LOVE|YOU$
^(RE|A|L)((L|OV*E)*)$
^(LUC*Y*|IN.THE.SKY)(WITH|DI*A*M*ON*D*S*)$
^(IVE*|GOT|A|F*E*E*L*I*N*G*)*$
^YEST*E*R*D*A*Y*$
2 3
^(C|P)(OL|AS)$
^(LU|TO)(X|R)$
^CT|PL$
^OU|AO$
^SR|LX$
2 2
^T*|(HI)|S*$
^SE|NT|EN|CE$
^IS$
^(F|A|L|S|E)*$
2 4
^ARKA|BARB|COLU$
^NSAS|ADOS|MBIA$
^..$
^..$
^KA|RO|LI$
^AS|BA|US$
0 0
Выходные данные #1
IC
PC
HE
LP
ALLY
OUNE
EDIS
LOVE
ambiguous
none
ARKA
NSAS
Источник ACM International Collegiate Programming Contest, Asia Regional Contest, Aizu, 2013–11–24