EduBrick

O. Где стоит общая подстрока

3000 мс · 256 МБ · всё или ничего

Найдите наибольшую общую подстроку двух строк и укажите, где она стоит в каждой.

Длина ищется как в классе - двоичным поиском по хешам. Дальше надо восстановить позиции, и тут появляется новая тонкость.

После того как длина LL найдена, повторяем проверку ещё раз, но теперь запоминаем для каждого хеша наименьшую позицию в первой строке. Потом идём по второй строке слева направо и для каждой позиции, чей хеш нашёлся, получаем пару (i,j)(i, j).

Из всех пар берём наименьшую: сначала по ii, при равенстве - по jj. Поскольку по второй строке мы идём по возрастанию, для фиксированного ii первое же найденное jj и будет наименьшим.

Если общих подстрок нет вовсе, выведите одно число 0.

Хранить в словаре надо именно минимум позиции, а не первую попавшуюся: одинаковых подстрок в первой строке может быть много, и если класть последнюю, ответ окажется не наименьшим.

Формат ввода

В первой строке - строка ss, во второй - строка tt.

Обе непусты, состоят из строчных латинских букв, длины не превосходят 10510^5.

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

Если общей подстроки нет, выведите одно число 0.

Иначе выведите три числа: длину наибольшей общей подстроки и позиции её начала в ss и в tt (нумерация с единицы), наименьшие в описанном смысле.

Примеры

ввод
abacaba
bacab
вывод
5 2 1
ввод
abc
xyz
вывод
0
Войдите, чтобы отправлять решения.