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

Суффиксный пулемёт

Суффиксный пулемёт

\textit{_Или зачёт, или автомат.___________________} \textit{Ганнибал Ректор} Теоретическая подготовка новобранцев армии Поссилтума включала в себя не только занятия по военному праву, но и начала криптографии. Лекции читал майор Мега Байт, не чуждый солдатского юмора. Гвидо и Нунцио, в чьё задание входил развал армии Поссилтума изнутри, решили на этом сыграть, внеся путаницу в терминологию. В начале очередной лекции Нунцио поднял руку и спросил: - \textit{Вот вы на прошлой лекции рассказывали про конечные автоматы. А про конечные пулемёты расскажете?} Мега Байт не растерялся. \textit{- Суффиксный пулемёт - это конечный автомат, принимающий все суффиксы данной строки (от нулевого до }\textbf{L}\textit{-го включительно, где }\textbf{L}\textit{ - длина строки), и только их. Сержант Гвидо!} - \textit{Я, господин майор!} - \textit{Вы сможете отличить автомат от пулемёта?} - \textit{Так точно, господин майор!} - \textit{Вам дан конечный автомат. Требуется проверить, является ли он суффиксным пулемётом данной строки.} К сожалению, написание программ такого типа не входило в обязанности Гвидо и Нунцио как в Синдикате, так и в корпорации М.И.Ф. Так что соответствующую программу придётся писать Вам. \InputFile Во входном файле задан один или несколько тестовых наборов. В первой строке каждого набора заданы количество состояний автомата \textbf{N}, количество переходов \textbf{M}, а также количество принимающих состояний \textbf{T} (\textbf{1} ≤ \textbf{T} ≤ \textbf{N} ≤ \textbf{50000}, \textbf{1} ≤ \textbf{M} ≤ \textbf{100000}). Во второй строке через пробел заданы \textbf{T} различных чисел в пределах от \textbf{1} до \textbf{N} - принимающие состояния автомата, в возрастающем порядке. В последующих \textbf{M} строках заданы переходы в виде \textbf{a_i} \textbf{b_i} \textbf{c_i}, где \textbf{1} ≤ \textbf{a_i}, \textbf{b_i} ≤ \textbf{n}, а \textbf{c_i} - маленькая буква латинского алфавита. Переход производится из состояния \textbf{a_i} в состояние \textbf{b_i} по букве \textbf{c_i}. Из каждого состояния \textbf{a_i} есть не более одного перехода по символу \textbf{c_i}. Последняя строка описания набора - это строка \textbf{S}, для которой автомат должен являться пулемётом. Она состоит только из маленьких латинских букв, и ее длина лежит в пределах от \textbf{1} до \textbf{50000} включительно. Кроме того, сумма всех \textbf{N} и суммарная длина всех строк, для которых необходимо произвести проверку, не превосходит \textbf{50000}, а сумма всех \textbf{M} не превосходит \textbf{100000}. Файл заканчивается фиктивным набором, в котором \textbf{N=M=T=0}. Начальным состоянием автомата является первое. Если при интерпретации какой-то строки в автомате отсутствует соответствующий переход, то автомат вываливается по ошибке и строку не принимает. Таким образом, строка принимается, только если при её интерпретации были найдены все переходы, и по их завершении автомат оказался в принимающем состоянии (при этом неважно, были по пути принимающие состояния, или нет). \OutputFile Выведите в выходной файл, является ли данный автомат пулемётом, следуя формату примера.
Лимит времени 2 секунды
Лимит использования памяти 64 MiB
Входные данные #1
2 1 2
1 2
1 2 a
a
2 2 2
1 2
1 1 a
1 2 b
ab
0 0 0
Выходные данные #1
Automaton 1 is a machinegun.
Automaton 2 is not a machinegun.