题号:NC295772
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

\hspace{15pt}本题为问题《C.绿》的困难版本,两题的唯一区别在于构成字符串的字符集的大小。

\hspace{15pt}在古老的魔法图书馆中,两位年轻的魔法学徒小绿和小紫发现了一本记载着神秘二进制魔法的古籍。书中描述了一种通过复制特定咒语来增强魔法威力的方法。她们决定分别研究这个魔法的不同版本:
\hspace{15pt}小绿获得了一段魔法咒语 s,这段咒语仅由字符 0 1 组成。她将这段咒语复制 n 次并连接起来,形成新的强化咒语 S。例如,若 s = \texttt{n = 3,则 S = \texttt{
\hspace{15pt}魔法古籍中提到,稳定的魔法序列必须满足单调不减的特性,即序列中不会出现 01 之后的情况。小绿想知道,这个强化咒语 S 中可以找出多少个不同的非空子序列是稳定的魔法序列。由于答案可能很大,请将答案对 (10^9+7) 取模后输出。

【名词解释】
\hspace{15pt}非空子序列:从原字符串中任意删除字符,且保持剩余字符相对顺序不变所得到的新字符串,至少包含原字符串中的一个字符。即便子序列字符内容相同,像从 \texttt{ 不同位置选取得到的 \texttt{ 子序列,因选取位置有别,在序列构造意义上也不相同。

输入描述:

\hspace{15pt}每个测试文件均包含多组测试数据。第一行输入一个整数 T\left(1\leq T\leq 10^4\right) 代表数据组数,每组测试数据描述如下:
\hspace{15pt}第一行输入一个整数 n\left(1 \leq n \leq 10^{18}\right),表示字符串 s 复制的次数。
\hspace{15pt}第二行输入一个长度为 1 \leq {\rm length}(s) \leq 10^5,仅由字符 \texttt{`0'} \texttt{`1'} 组成的字符串 s在这个版本中,我们对字符集没有额外的限制
\hspace{15pt}除此之外,保证单个测试文件中所有输入字符串 s 的长度总和不超过 2 \times 10^5

输出描述:

\hspace{15pt}对于每组测试数据,输出一个整数,表示字符串 S 中单调不减的子序列的数量。由于答案可能非常大,请将结果对 (10^9+7) 取模后输出。
示例1

输入

复制
3
1
0011
2
011
3
0101

输出

复制
15
39
447