11586. Підрядки


Відправити розв'язок

Бали: 100
Time limit: 2.0s
Memory limit: 500M

Author:
Problem type
Allowed languages
C++, Java, Pascal, Python

Дано рядок \(S\). З цього рядка Степан створить новий рядок \(T\) наступним чином.

  • Спочатку позначте один або кілька символів у \(S\). Тут жодні два позначені символи не повинні бути сусідніми.

  • Далі видаліть усі непозначені символи.

  • Нарешті, нехай \(T\) буде рядком, що залишився. Тут заборонено змінювати порядок символів.

Скільки існує рядків, які можна отримати як \(T\)? Знайдіть кількість за модулем (\(10^9 + 7\)).

Формат вхідних даних

Вхідний потік містить рядок \(S\) (\(1 \le |S| \le 2 \times 10^5\)), який складається з малих англійських літер.

Формат вихідних даних

У вихідний потік виведіть шукану кількісь рядків.

Примітка

До прикладу 1:

Є чотири рядки, які можна отримати як \(T\): 'a', 'b', 'c' і 'ac'.

Позначення першого символу \(S\) дає 'a';

позначення другого символу \(S\) дає 'b';

позначення третього символу \(S\) дає 'c';

позначення першого і третього символів \(S\) дає 'ac'.

Зверніть увагу, що заборонено, наприклад, позначати перший і другий символи.

Приклад вхідних даних

abc

Приклад вихідних даних

4

Приклад вхідних даних

aa

Приклад вихідних даних

1

Приклад вхідних даних

acba

Приклад вихідних даних

6

Коментарі

Ще немає коментарів.