#L3115. 「SDOI2019」连续子序列

「SDOI2019」连续子序列

题目描述

我们定义 T. M. 序列 {Tn}\{T_n\} 为如下形式的布尔序列:

  • T0=0T_0 = 0
  • T2n=TnT_{2n} = T_n
  • T2n+1=1TnT_{2n+1} = 1 - T_n

这里我们给出 T. M. 序列的前若干项:0110100110010110100101100110100101101001100101101001011001101001\cdots

T. M. 序列是一个无限长度的序列,它有很多连续子序列。
例如 001110100101001001110011011001011001 都是它的连续子序列,然而 11111110001000 却不是它的连续子序列。

现在给定一个布尔序列(0101 字符串)SS 和一个非负整数 kk,请统计一下一共有多少种 T. M. 序列的连续子序列 TT 满足:

  • SSTT 的前缀;
  • TT 是由 SS 额外在右侧添加了恰好 kk 项形成的。

输入格式

第一行给定一个整数 TT,表示输入一共含有 TT 组数据。

之后 TT 行,每一行给定一个 0101 字符串 SS(表示一个布尔序列)和一个非负正整数 kk,为给定的一组数据。


输出格式

对于每一组数据,输出一行并含有一个整数,表示满足条件的连续子序列个数。因为数值可能很大,请输出关于 109+910^9+9 取模后的值。


样例

输入

5
1001 3
11001 10
00111 10
0011 20
0 100

输出

3
4
0
6
164

数据范围与提示

  • 子任务 12020 分):1T1001 \le T \le 100,给定布尔序列长度不超过 100100,且 0k1000 \le k \le 100

  • 子任务 22020 分):1T1001 \le T \le 100,给定布尔序列长度不超过 100100,且 0k500000 \le k \le 50000

  • 子任务 36060 分):1T1001 \le T \le 100,给定布尔序列长度不超过 100100,且 0k10180 \le k \le 10^{18}