Ctrl K

Хвост вперёд

Сложная
Даны строки start и goal одинаковой длины n. За один ход от текущей строки отрезают хвост длиной от 1 до n − 1 и переставляют его в начало. Например, из abcd, перенеся хвост cd, получаем cdab. Посчитайте, сколькими способами можно сделать ровно moves ходов так, чтобы из start получилась goal. Способы различаются, если хотя бы на одном ходу выбрана другая длина хвоста. Ответ может быть огромным, поэтому верните его по модулю 10⁹ + 7.
Пример 1
start='abc', goal='abc', moves=2 → 2

Ходом можно перенести в начало хвост длины 1 или 2. Чтобы за два хода вернуться к abc, подходят пары «1, затем 2» (abc → cab → abc) и «2, затем 1» (abc → bca → abc).

Пример 2
start='abab', goal='abab', moves=1 → 1

Из трёх возможных хвостов только перенос ab оставляет строку прежней.

Ограничения
  • 2 ≤ start.length ≤ 5·10⁵
  • goal.length == start.length
  • 1 ≤ moves ≤ 10¹⁵
  • start и goal состоят только из строчных латинских букв
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиЧисла с рабочих клавиш СложнаяСтроки из диапазона без запретного слова СложнаяПереключить выход схемы СложнаяПроверка контрольной по арифметике СложнаяСекции по два кресла Сложная
загружаем Python…
Вход
start='abc', goal='abc', moves=2
Ожидается
2

«Запустить» — первые 3 теста у тебя в браузере, «Отправить» — все 61 тест на сервере, включая скрытые.