简单九连环
题目背景
**提示:此题有大样例。**
**提示:本题中的九连环与传统九连环不同。**
九连环是一种源于中国的传统智力游戏。如图所示,九个的圆环套在一把“剑”上,并且互相牵连。
![](https://cdn.luogu.com.cn/upload/pic/17568.png)
在传统的九连环中,第 $k(k\ge 2)$ 个环可以装上“剑”(记为 $1$)或拆下“剑”(记为 $0$),当且仅当第 $k-1$ 个环在剑上,且再之前的环不在剑上;特别地,第 $1$ 个环可以任意上下。
本题中我们将会讨论更一般的情形,虽然这种简单九连环不一定可以在物理意义上造出。
题目描述
一个简单九连环,可以看作两个 `01` 串——规则串 $s$ 和状态串 $t$,满足 $|s|=|t|-1$。其中 $t_i = \texttt 1$ 表示第 $i$ 个环是装上的,$t_i = \texttt 0$ 表示第 $i$ 个环是拆下的。
$s$ 在同一局游戏中是不变的,而 $t$ 每步会变化一个位置上的值(从 `0` 变成 `1` 或从 `1` 变成 `0`)。简单九连环被拆下,当且仅当 $t_i$ 全是 `0`;简单九连环被装上,当且仅当 $t_i$ 全是 `1`。
简单九连环规定,$t_i$ 可以变化,当且仅当 $t_{1\sim i-1}$ 是 $s$ 的一个**后缀**。可以看出,传统的九连环就是 $s$ 为 `00...01` 的特殊情形。
给出一个 $s$,问从拆下状态到装上状态至少需要几步,答案对 $10^9+7$ 取模。
输入输出格式
输入格式
第一行一个整数 $n$,表示 $s$ 的长度。**注意不是环的数量。**
第二行一个 `01` 串 $s$。
输出格式
一行一个整数,表示答案对 $10^9+7$ 取模后的值。
输入输出样例
输入样例 #1
3
011
输出样例 #1
6
输入样例 #2
8
00000001
输出样例 #2
341
输入样例 #3
见附件中的 samples/rings3.in
输出样例 #3
见附件中的 samples/rings3.ans
输入样例 #4
见附件中的 samples/rings4.in
输出样例 #4
见附件中的 samples/rings4.ans
说明
### 样例 1 解释
初始时刻所有环都不在简单九连环的剑上,状态串 $t$ 为 `0000`。
第 1 步装上第 $1$ 个环,$t$ 变成 `1000`。
第 2 步装上第 $2$ 个环,$t$ 变成 `1100`。
第 3 步装上第 $3$ 个环,$t$ 变成 `1110`。
接下来你不能直接装上第 $4$ 个环,因为 `111` 并不是规则串 $s$ `011` 的后缀。因此第 4 步应拆下第 $1$ 个环,$t$ 变成 `0110`。
然后第 5 步装上第 $4$ 个环,$t$ 变成 `0111`。
最后一步装上第 $1$ 个环,$t$ 变成 `1111`,完成目标。
### 样例 2 解释
这就是传统的九连环,且恰好有 $9$ 个环。
### 样例 3 解释
样例 3 满足测试点 $7$ 的限制。
### 样例 4 解释
样例 4 满足测试点 $15$ 的限制。
### 数据规模与约定
对于 $100\%$ 的数据,$1\le n\le 2000$,$s_i\in\{\texttt 0,\texttt 1\}$。
|测试点编号|$\vert s\vert\le$|特殊性质|
|:-:|:-:|:-:|
|$1\sim 3$|$3$||
|$4\sim 6$|$15$||
|$7\sim 11$|$300$||
|$12\sim 13$|$1000$||
|$14$|$2000$|$s_i$ 全为 `0`|
|$15\sim 17$|$2000$|$s$ 末尾为 `1`,其余位置为 `0`|
|$18\sim 25$|$2000$||