#L3398. 「2020-2021 集训队作业」带加强和多项木

「2020-2021 集训队作业」带加强和多项木

题目描述

带加强同学定义了一种“铁”的有根树:对于树中每个非叶节点,若其有 ( x ) 个孩子,则 ( x \in D )(( D ) 是给定的正整数集合)。

请回答 ( T ) 次询问,每次给定 ( n ),求有 ( n ) 个叶子的“铁”树的数量,答案对 ( M ) 取模。

输入格式

第一行输入三个正整数 ( T, K, M ),分别表示询问次数、集合中数的范围和模数。

接下来一行一个长为 ( K-1 ) 的 01 串,串中(从 2 开始计数)第 ( x ) 个数是 1 表示 ( x \in D ),否则 ( x \notin D )。

接下来 ( T ) 行,每行一个正整数 ( n ),表示询问的叶子数量。

输出格式

输出 ( T ) 行,按照询问顺序输出对应的答案。

样例 1

  • 输入:
    5 2 47
    1
    1
    2
    3
    4
    5
    
  • 输出:
    1
    1
    2
    5
    14
    

说明:此时 ( D = {2} ),答案为卡特兰数 ( C_{n-1} )。

样例 2

  • 输入:
    10 15 50
    11101010101101
    1
    2
    3
    4
    5
    10
    100
    10000
    998244353
    1145141919810
    
  • 输出:
    1
    1
    3
    11
    44
    27
    31
    30
    10
    26
    

数据范围

对于 100% 的数据:

  • ( 1 \le n \le 10^{18} )
  • ( 2 \le K, M \le 50 )
  • ( 1 \le T \le 100 )

子任务说明:

  • 特殊限制 A:( M ) 为质数
  • 特殊限制 B:( \gcd(n, M) = 1 )