CFCF2189D1.Little String (Easy Version)

普及+/提高

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

这是该问题的简单版本。不同之处在于,在本版本中,字符串 ss 保证不包含字符 ?。

对于由 0011 组成的字符串 w1w2wnw_1w_2 \ldots w_n,我们定义 f(w)f(w) 为数组 [0,1,,n1][0, 1, \ldots, n-1] 的所有排列 p1,p2,,pnp_1, p_2, \ldots, p_n 的个数,满足对于所有 1in1 \leq i \leq n,都有:

  • 如果 wi=1w_i = \texttt{1},则存在 1lrn1 \leq l \leq r \leq n,使得 mex([pl,pl+1,,pr])=i\operatorname{mex}([p_l, p_{l+1}, \ldots, p_r]) = i
  • 如果 wi=0w_i = \texttt{0},则不存在 1lrn1 \leq l \leq r \leq n,使得 mex([pl,pl+1,,pr])=i\operatorname{mex}([p_l, p_{l+1}, \ldots, p_r]) = i

已知一个由字符 0011 组成的字符串 s1s2sns_1s_2 \ldots s_n,以及一个正整数 cc。注意,在本版本的问题中,字符串 ss 不包含 ?。考虑所有可以通过将 ss 中的 ? 替换成 0011 得到的字符串 ww,找到所有这样的字符串 wwf(w)f(w) 不被 cc 整除的最小值,或者判断是否不存在这样的字符串 ww。由于答案可能很大,要求输出对 109+710^9+7 取模的结果。

注:mex\operatorname{mex}(最小未出现数)指在一组整数 c1,c2,,ckc_1, c_2, \ldots, c_k 中未出现的最小非负整数 xx

输入格式

每个测试点包含多组测试用例。第一行包含整数 tt,表示测试用例数量(1t1041 \le t \le 10^4)。接下来是每组测试用例的描述。

每个测试用例的第一行包含两个整数 nncc3n21053 \leq n \leq 2 \cdot 10^51c1091 \leq c \leq 10^9)——字符串的长度,以及函数值的限制数。

第二行包含一个长度为 nn 的字符串 ss,只由字符 0011 组成。

保证所有测试用例中 nn 的总和不超过 21052 \cdot 10^5

输出格式

对于每个测试用例,如果存在某个由 ss 替换 ? 得到的字符串 ww,使得 f(w)f(w) 不被 cc 整除,则输出所有这些 wwf(w)f(w) 的最小值。答案对 109+710^9+7 取模。如果不存在这样的 ww,则输出 1-1

输入输出样例

  • 输入#1

    9
    3 3
    001
    3 1
    111
    4 100
    1001
    6 100
    111001
    6 100
    111101
    5 8
    10001
    4 100
    1110
    21 123456789
    111000111000111000111
    3 4
    101

    输出#1

    -1
    -1
    4
    96
    64
    12
    -1
    336892528
    2

说明/提示

在第二个测试用例中,不存在合适的字符串 ww,因为 f(w)f(w) 总是能被 11 整除。

在第三个测试用例中,只能取 w=sw=s,此时 f(w)=4f(w)=4,有恰好 44 个符合条件的排列:

  1. p=[0,2,3,1]p = [0, 2, 3, 1]
  2. p=[0,3,2,1]p = [0, 3, 2, 1]
  3. p=[1,2,3,0]p = [1, 2, 3, 0]
  4. p=[1,3,2,0]p = [1, 3, 2, 0]

在第六个测试用例中,可以取 w=10001w = \mathtt{10001},此时 f(w)=12f(w)=12。其中有一种符合条件的排列为 [0,4,3,2,1][0,4,3,2,1],而排列 [0,1,2,3,4][0,1,2,3,4] 则不符合要求。可以证明 1212 是所有不能被 88 整除的 f(w)f(w) 最小值。

首页