Олимпиадный тренинг

Задача . F. Путешествие по строке


Скажем, что последовательность строк t1, ..., tk является путешествием длины k, если для всех i > 1 ti является подстрокой ti - 1 строго меньшей длины. Например, {ab, b} является путешествием, а {ab, c} или {a, a} — нет.

Определим путешествие по строке s как путешествие t1, ..., tk, все строки которого могут быть вложены в s так, чтобы существовали (возможно, пустые) строки u1, ..., uk + 1, такие, что s = u1t1u2t2... uktkuk + 1. К примеру, {ab, b} является путешествием по строке для abb, но не для bab, так как соответствующие подстроки расположены справа налево.

Назовём длиной путешествия количество строк, из которых оно состоит. Определите максимально возможную длину путешествия по заданной строке s.

Входные данные

В первой строке задано целое число n (1 ≤ n ≤ 500 000) — длина строки s.

Во второй строке содержится строка s, состоящая из n строчных английских букв.

Выходные данные

Выведите одно число — наибольшую длину путешествия по строке s.

Примечание

В первом примере путешествием по строке наибольшей длины является {abcd, bc, c}.

Во втором примере подходящим вариантом будет {bb, b}.


Примеры
Входные данныеВыходные данные
1 7
abcdbcc
3
2 4
bbcb
2

time 5000 ms
memory 512 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
 Кол-во
С++ Mingw-w645
Комментарий учителя