#CF1038F. 环绕匹配

环绕匹配

环绕匹配

  • 时间限制:3 秒
  • 内存限制:512 MiB

题目描述

给定一个二进制字符串 ss。求有多少个长度为 nn 的不同二进制字符串 tt,把 tt 看成循环字符串后包含 ss 作为子串。

如果存在 tt 的某个循环移位,使得 ss 是该移位字符串的子串,就称循环字符串 tt 包含 ss。例如,循环字符串 000111 包含 001、01110 和 10,但不包含 0110 和 10110。

两个字符串只要本身不同,就被视为不同答案;即使它们仅相差一次循环移位,也仍分别计数。

输入格式

第一行一个整数 nn,表示目标字符串长度。

第二行一个仅含 0、1 的字符串 ss。

输出格式

输出满足条件的字符串数量。

样例输入 1

2
0

样例输出 1

3

样例输入 2

4
1010

样例输出 2

2

样例输入 3

20
10101010101010

样例输出 3

962

数据范围

对于所有数据,1≤∣s∣≤n≤401\le |s|\le n\le40。

子任务编号 分值 特殊限制
1 20 n≤12n\le12
2 40 n≤20n\le20
3 无特殊限制

每个测试点独立计分。