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.