eolymp
bolt
Try our new interface for solving problems
Problems

Суффиксный автомат

Суффиксный автомат

\textit{Суффиксным автоматом} для строки \textbf{w} называется детерминированный конечный автомат \textbf{A}, который допускает язык \textbf{Suff(w)} - множество суффиксов слова \textbf{w}. Например, суффиксный автомат для слова \textbf{abbab} должен допускать в точности следующие слова: \{\textbf{abbab}, \textbf{bbab}, \textbf{bab}, \textbf{ab}, \textbf{b}, \textbf{ε}\}. Мы также требуем, чтобы суффиксный автомат не имел недостижимых состояний, и не было состояний, из которых не достижимы допустимые. Других ограничений, например, минимальности, накладывать не будем. На рисунке показан суффиксный автомат для слова \textbf{abbab}. \includegraphics{https://static.e-olymp.com/content/98/98910a37f34c9bdcf3b6ac09dd5cb2e607516b09.jpg} По заданному \textit{скелету} суффиксного автомата некоторого слова требуется восстановить суффиксный автомат. А именно - вам даны состояния, переходы, начальное состояние и допускающие состояния. Но пометки на рёбрах удалены. Вам следует расставить пометки на рёбрах заданного суффиксного автомата так, чтобы он стал суффиксным автоматом некоторого слова \textbf{w}, а также найти это слово. Для простоты будем считать, что размер алфавита ничем не ограничен, вы можете использовать в качестве символов числа от \textbf{1} до \textbf{k} (\textbf{k} вы можете выбрать сами). \InputFile Первая строка входного файла содержит три целых числа: \textbf{n}, \textbf{m} и \textbf{t} - количество состояний, количество переходов, и количество допускающих состояний, соответственно (\textbf{2} ≤ \textbf{n} ≤ \textbf{200}, \textbf{1} ≤ \textbf{m} ≤ \textbf{1000}, \textbf{1} ≤ \textbf{t} ≤ \textbf{n}). Вторая строка содержит \textbf{t} целых чисел - номера допускающих состояний (состояния пронумерованы с \textbf{1}, начальное состояние имеет номер \textbf{1}). Следующие \textbf{m} строк описывают переходы: каждая строка содержит два целых числа \textbf{s_i} и \textbf{t_i} и описывают переходы из \textbf{s_i} в \textbf{t_i}. \OutputFile На первой строке выходного файла выведите два целых числа \textbf{l} и \textbf{k} - длину слова \textbf{w} и размер алфавита. Используйте числа \{\textbf{1}, ..., \textbf{k}\} как элементы алфавита. \textbf{k} не должно превышать \textbf{m}. Вторая строка должна содержать \textbf{l} целых чисел - слово \textbf{w}. Наконец, третья строка должна содержать \textbf{m} целых чисел - метки на переходах скелета автомата, в том порядке, в каком они описаны во входном файле. Гарантируется, что ответ всегда существует. \Note \includegraphics{https://static.e-olymp.com/content/69/69303f068fb0993625d5a6bf798ec3575727e0ab.jpg}
Time limit 2 seconds
Memory limit 256 MiB
Input example #1
7 8 4
1 3 4 7
1 2
1 3
2 4
3 5
3 6
4 5
5 6
6 7
Output example #1
5 2
1 2 2 1 2
1 2 2 2 1 2 1 2