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

Задача . F. Поворот строки


Задача

Темы: дп Строки *2900

Вам дана строка \(s\) над бинарным алфавитом.

Посчитайте количество различных циклических строк длины \(n\) над бинарным алфавитом, которые содержат \(s\) как подстроку.

Циклическая строка \(t\) содержит \(s\) как подстроку если существует какой-то циклический сдвиг строки \(t\), такой что \(s\) является подстрокой этого циклического сдвига строки \(t\).

Например, циклическая строка «000111» содержит подстроки «001», «01110» и «10», но не содержит «0110» и «10110».

Две циклические строки называются различными, если они отличаются как строки. Например, две различные строки, которые отличаются друг от друга циклическим сдвигом, являются различными циклическими строками.

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

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 40\)) — длина требуемых строк \(t\).

Вторая строка содержит строку \(s\) (\(1 \le |s| \le n\)) — строка, которая должна быть подстрокой циклической строки \(t\). Строка \(s\) содержит только символы '0' и '1'.

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

Выведите одно число — количество различных циклических строк \(t\) над бинарным алфавитом, которые содержат \(s\) как подстроку.

Примечание

В первом примере есть три циклических строки, которые содержат "0" — "00", "01" и "10".

Во втором примере есть только две такие строки — "1010", "0101".


Примеры
Входные данныеВыходные данные
1 2
0
3
2 4
1010
2
3 20
10101010101010
962

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

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