Олимпиадный тренинг

Задача . G. Песни сирен


Кто по незнанию приближается к ним и слышит голос сирен, тот больше не возвращается.

Гомер, Одиссея

Во времена Ясона и Аргонавтов, было хорошо известно, что сирены используют свои песни, чтобы заманивать моряков к себе на погибель. Но немногие знали, что каждый раз сирены, когда зовут моряков по имени, те становятся слабее и более уязвимыми.

Для целей этой задачи, и песни сирен, и имена моряков будем представлять строками, состоящими из строчных английских букв. Чем больше раз имя моряка появляется как непрерывная подстрока в песне, тем моряк в большей опасности.

Ясон обнаружил, что сирены могут петь одну из \(n+1\) песен, которые имеют следующую структуру: пусть \(s_i\) (\(0 \leq i \leq n\)) будет \(i\)-й песней, а \(t\) — некоторой строкой длины \(n\), тогда для всех \(i < n\): \(s_{i+1} = s_i t_i s_i\). другими словами, \(i+1\)-я песня это конкатенация \(i\)-й песни, \(i\)-й буквы (в \(0\) индексации) строки \(t\), и \(i\)-й песни.

К счастью, он также знает \(s_0\) и \(t\). Ясон интересуется, сколько раз имя моряка встречается в конкретной песне. Ответьте на \(q\) вопросов: дано имя моряка (\(w\)) и номер песни (\(i\)), выведите количество вхождений \(w\) в \(s_i\) как подстроки. Так как это число может быть довольно большим, выведите его по модулю \(10^9+7\).

Входные данные

В первой строке дано два целых числа \(n\) и \(q\) (\( 1 \leq n, q \leq 10^5\)), обозначающих что есть \(n+1\) песня и \(q\) вопросов. В следующих двух строках даны две строки \(s_0\) и \(t\) (\(1 \leq |s_0| \leq 100, |t| = n\)).

Следующие \(q\) строк содержат вопросы: каждая строка содержит число \(k\) (\( 0 \leq k \leq n\)), индекс песни сирен, и непустую строку \(w\), обозначающую имя моряка. Все строки состоят из строчных английских букв. Сумма длин имен моряков не превышает \(10^6\).

Выходные данные

Выведите \(q\) строк, \(i\)-я из них должна содержать остаток по модулю \(10^9+7\) от числа вхождений \(w\) в \(s_k\).

Примечание

В первом примере песни сирен выглядят так:

  • Песня \(0\): aa
  • Песня \(1\): aabaa
  • Песня \(2\): aabaacaabaa
  • Песня \(3\): aabaacaabaadaabaacaabaa

Примеры
Входные данныеВыходные данные
1 3 3
aa
bcd
2 aba
3 ca
3 aa
2
2
8
2 4 5
aba
bbac
1 a
3 baca
3 ab
2 bab
4 aba
4
0
14
6
28

time 2000 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
 Кол-во
С++ Mingw-w645
Комментарий учителя