Дано два рядки та . Побудуйте стиснене дерево суфіксів, яке містить усі суфікси обох рядків.
Знайдіть таке дерево, яке міститиме мінімально можливу кількість вершин.
У першому рядку задано рядок (1 \leq |\textbf{s}| \leq 10^5), де останній символ — "", а всі інші — малі латинські літери.
У другому рядку задано рядок (1 \leq |\textbf{t}| \leq 10^5), де останній символ — "\textbf{#}", а всі інші — малі латинські літери.
Пронумеруйте вершини дерева від до n - 1 у порядку обходу в глибину, обходячи піддерева у лексикографічному порядку відносно символів на вихідних ребрах з кожної вершини. Для визначення порядку використовуйте ASCII-коди символів.
У першому рядку виведіть одне ціле число — кількість вершин у дереві. У наступних n - 1 рядках виведіть опис кожної вершини (крім кореня) у зростаючому порядку їх номерів.
Опис вершини складається з чотирьох цілих чисел: , , , , де (0 \leq p < n, p \neq v) — номер батьківської вершини для поточної вершини , (0 \leq w \leq 1) — індекс рядка для ідентифікації підрядка на ребрі. Якщо w = 0, то на ребрі від до розташовано підрядок \textbf{s}[lf \ldots rg - 1] (0 \leq lf < rg \leq |\textbf{s}|), а якщо w = 1, то — підрядок \textbf{t}[lf \ldots rg - 1] (0 \leq lf < rg \leq |\textbf{t}|).
Приклад 1
Приклад 2
Підрядком \textbf{s}[l \ldots r] (0 \leq l \leq r < |\textbf{s}|) називається рядок \textbf{s}_l \textbf{s}_{l+1} \ldots \textbf{s}_r, де \textbf{s} = s_0 s_1 \ldots s_{|\textbf{s}| - 1} і — довжина рядка .