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

Суфіксне дерево двох рядків

Суфіксне дерево двох рядків

Задано рядки \textbf{s} та \textbf{t}. Побудуйте стиснене суфіксне дерево, яке містить усі суфікси рядка \textbf{s} та рядка \textbf{t}. Знайдіть таке дерево, яке містить мінімальну кількість вершин. \InputFile У першої рядку записано рядок \textbf{s} (\textbf{1} ≤ \textbf{|s|} ≤ \textbf{10^5}), останнім символом рядка є "\textbf{\$}", інші символи рядка маленькі латинські літери. У другому рядку записано рядок \textbf{t} (\textbf{1} ≤ \textbf{|t|} ≤ \textbf{10^5}), останнім символом рядка є "\textbf{#}", інші символи рядка маленькі латинські літери. \OutputFile Пронумеруйте вершини дерева від \textbf{0} до \textbf{n-1} у порядку обходу у глибину, обходячи піддерева у порядку лексикографічного сортування виходячих з вершини ребер. Використовуйте ASCII-коди символів для визначення їх порядку. У першому рядку виведіть ціле число \textbf{n} --- кількість вершин дерева. У наступних \textbf{n-1} рядках виведіть описи вершин дерева, крім кореня, у порядку збільшення їх номерів. Опис вершини дерева \textbf{v} складається з чотирьох цілих чисел: \textbf{p}, \textbf{w}, \textbf{lf}, \textbf{rg}, де \textbf{p} (\textbf{0} ≤ \textbf{p} < \textbf{n}, \textbf{p} ≠ \textbf{v}) --- номер предка поточної вершини, \textbf{w} (\textbf{0} ≤ \textbf{w} ≤ \textbf{1}) --- номер рядка для визначення підрядка на ребрі. Якщ \textbf{w = 0}, то на ребрі, що веде з \textbf{p} у \textbf{v}, написано підрядок \textbf{s\[lf...rg-1\]} (\textbf{0} ≤ \textbf{lf} < \textbf{rg} ≤ \textbf{|s|}). Якщо \textbf{w = 1}, то на ребрі, що веде з \textbf{p} у \textbf{v}, написано підрядок \textbf{t\[lf...rg-1\]} (\textbf{0} ≤ \textbf{lf} < \textbf{rg} ≤ \textbf{|t|}). \textbf{Примітка} \textit{Підрядком} \textbf{s\[l...r\]} (\textbf{0} ≤ \textbf{l} ≤ \textbf{r} < \textbf{|s|}) рядка \textbf{s = s_0s_1...s_\{|s|-1\}} (де \textbf{|s|} --- довжина рядка \textbf{s}) називається рядок \textbf{s_ls_\{l+1\}...s_r}.
Ліміт часу 1.5 секунда
Ліміт використання пам'яті 256 MiB
Вхідні дані #1
ab$
ac#
Вихідні дані #1
8
0 1 2 3
0 0 2 3
0 0 0 1
3 0 1 3
3 1 1 3
0 0 1 3
0 1 1 3
Вхідні дані #2
aba$
baab#
Вихідні дані #2
14
0 1 4 5
0 0 3 4
0 0 0 1
3 0 3 4
3 1 2 5
3 0 1 2
6 1 4 5
6 0 2 4
0 0 1 2
9 1 4 5
9 0 2 3
11 0 3 4
11 1 2 5
Джерело Зимова школа Харків 2013, День 6 - Г.Агапова та І.Фефера