Синхронне відлуння#13118

Синхронне відлуння

3 секунди
256 мегабайтів

Дано два рядки і , що складаються з малих латинських літер.

Для непорожнього рядка позначимо через p_1<p_2<\ldots<p_k усі позиції початку його входжень у , а через q_1<q_2<\ldots<q_m — усі позиції початку його входжень у . Позиції нумеруються з .

Назвемо рядок синхронним, якщо k=m\ge 3 та існує ціле число , для якого

q_i=p_i+d\quad\text{для всіх }1\le i\le k.

Інакше кажучи, усі входження в одному рядку можна зсунути на однакову кількість позицій, щоб вони збіглися з усіма його входженнями в іншому рядку. Зсув може бути додатним, від'ємним або нульовим і може бути різним для різних рядків .

Знайдіть кількість різних непорожніх синхронних рядків. Два рядки вважаються різними, якщо вони відрізняються довжиною або хоча б одним символом. Входження можуть перекриватися.

Вхідні дані

Перший рядок містить рядок , другий — рядок (1\le |s|,|t|\le 2\cdot 10^5). Обидва рядки складаються лише з малих латинських літер.

Вихідні дані

Виведіть одне ціле число — кількість різних непорожніх синхронних рядків.

Приклади

Приклад 1

Loading
Loading

Приклад 2

Loading
Loading

Приклад 3

Loading
Loading

Примітка

У першому прикладі підходять шість рядків: a, b, c, ab, bc, abc. Зокрема, abc входить у на позиціях , а в — на позиціях , тому для нього d=1.

У другому прикладі a входить у кожен рядок тричі, але на позиціях та . Одним зсувом сумістити ці набори неможливо. Інших рядків із щонайменше трьома входженнями в кожному рядку немає.

У третьому прикладі підходять рядки a, aa та aaa.

Оцінювання

  1. Підзадача ( балів): |s|,|t|\le 12.

  2. Підзадача ( балів): |s|,|t|\le 100.

  3. Підзадача ( балів): |s|,|t|\le 2000.

  4. Підзадача ( балів): s=t.

  5. Підзадача ( балів): \min(|s|,|t|)\le 200.

  6. Підзадача ( балів): без додаткових обмежень.