İki sıra üçün sufiks ağacı#4657

İki sıra üçün sufiks ağacı

1,5 saniyə
256 meqabayt
Çox çətin

İki ədəd və sətiri verilir, hər iki sətirin bütün sonluqlarını saxlayan sıxılmış sonluq ağacı qurun.

Elə bir ağac tapın ki, o, mümkün olan ən az sayda zirvəni ehtiva etsin.

Giriş

Birinci sətirdə sətiri verilir (1 \leq |\textbf{s}| \leq 10^5), burada sonuncu simvol ""-dir, qalan bütün simvollar isə kiçik latın hərfləridir.

İkinci sətirdə sətiri verilir (1 \leq |\textbf{t}| \leq 10^5), burada sonuncu simvol "\textbf{#}"-dır, qalan bütün simvollar isə kiçik latın hərfləridir.

Çıxış

Ağacın zirvələrini -dan n-1-ə qədər dərinlik üzrə öncəli (DFS) qaydada, hər bir zirvədən çıxan qolları ASCII kodlarına əsasən leksikqrafik ardıcıllıqla gəzərək nömrələyin.

Birinci sətirdə — ağacın zirvələrinin sayını çap edin. Növbəti n-1 sətirin hər birində, nömrələr üzrə artan qaydada (kökdən başqa), hər bir zirvənin təsvirini verin.

Hər bir zirvə təsvirində dörd tam ədəd olur: , , , , burada (0 \leq p < n, p \neq v) — cari zirvə -nin valideynidir, (0 \leq w \leq 1) — qollardakı altsətirlərin hansı sətirdən götürüldüyünü göstərən ədəddir. Əgər w = 0-dırsa, -dən -yə gedən qolda \textbf{s}[lf \ldots rg-1] alt sətri yerləşir (0 \leq lf < rg \leq |\textbf{s}|), əgər w = 1-dirsə, \textbf{t}[lf \ldots rg-1] alt sətri yerləşir (0 \leq lf < rg \leq |\textbf{t}|).

Nümunələr

Nümunə 1

Loading
Loading

Nümunə 2

Loading
Loading

Qeyd

Alt sətri \textbf{s}[l \ldots r] (0 \leq l \leq r < |\textbf{s}|) deyərkən, \textbf{s}_l\textbf{s}_{l+1}\ldots\textbf{s}_r nəzərdə tutulur, burada \textbf{s} = s_0s_1 \ldots s_{|\textbf{s}|-1} və -in uzunluğudur.