prefixe

Time limit: 0.6s Memory limit: 128MB Input: Output:

Cerință

Fie un șir de caractere SS, format din litere mici ale alfabetului englez, indexat de la 00. Aflați pentru fiecare i>=2i >= 2, cel mai mare ll pentru care există 0<j<il+10 < j < i - l + 1 unde stringurile [s0s1...sl1][s_0s_1...s_{l-1}], [sjsj+1...sj+l1][s_js_{j+1}...s_{j+l-1}] și [sil+1sil+2...si][s_{i-l+1}s_{i-l+2}...s_{i}] sunt egale. Dacă nu există un astfel de ll, afișați valoarea 00.

Date de intrare

Pe prima linie se va citi un număr natural NN reprezentând dimensiunea șirului. Pe a doua linie se află șirul de caractere SS.

Date de ieșire

În fişierul de ieşire se vor afişa, pe linii diferite, N2N-2 numere naturale reprezentând valorile lui ll pentru fiecare poziție mai mare sau egală decât 2.

Restricții și precizări

  • 1N1061 \leq N \leq 10^6;
  • Subtask 11 (1414p), N50N \leq 50;
  • Subtask 22 (1616p), N200N \leq 200;
  • Subtask 33 (3535p), N1 000N \leq 1 \ 000;
  • Subtask 44 (2020p), N100 000N \leq 100 \ 000;
  • Subtask 55 (1515p), N1 000 000N \leq 1 \ 000 \ 000.

Exemplul 1

stdin

10
babaaabaab

stdout

0
0
0
0
1
2
0
1

Exemplul 2

stdin

15
ldildildildqldi

stdout

0
0
0
0
1
2
3
4
5
0
1
2
3

Log in or sign up to be able to send submissions!