Пересечение минимальных циклических сдвигов

C++ Сложный strings

Задача «Пересечение минимальных циклических сдвигов»

Даны две строки s и t, состоящие из строчных латинских букв. Необходимо найти длину наибольшей общей подстроки, которая является подстрокой некоторого циклического сдвига строки s и некоторого циклического сдвига строки t. Циклический сдвиг — это перестановка символов строки, при которой все символы смещаются на k позиций влево, а выпавшие слева символы переносятся в конец. Длина строк не превышает 10^5. Если общая подстрока не найдена, вывести 0.

Формат ввода

В первой строке дана строка s (1 ≤ |s| ≤ 10^5). Во второй строке дана строка t (1 ≤ |t| ≤ 10^5). Строки состоят только из строчных латинских букв.

Формат вывода

Выведите одно целое число — длину наибольшей общей подстроки, которая встречается в некотором циклическом сдвиге s и некотором циклическом сдвиге t.

Примеры

Пример 1

ВВОД
abc def
ВЫВОД
0

Пример 2

ВВОД
bcd
ВЫВОД
abc
main.cpp