C0654 [TJOI2018]str

内存限制:256 MB 时间限制:1000 ms

题目描述

小豆参加了生物实验室。在实验室里,他主要研究蛋白质。

他现在研究的蛋白质是由 $k$ 个氨基酸按一定顺序构成的。每一个氨基酸都可能有 $a$ 种碱基序列 $s_{i,j}$ 构成。

现在小豆有一个碱基串 $s$,小豆想知道在这个碱基上有多少种不同的组合方式可能得到这个蛋白质。

即求由 $k$ 段字符串有序合并成的字符串 $s_1$,有多少种不同方式能够匹配字符串 $s$,其中 $k$ 段字符串的选法不同,或者与 $s$ 匹配上的位置不同认为是不同的方式。

输入格式

第一行一个数,表示这个蛋白质由 $k$ 个氨基酸。

第二行一个字符串 $s$,表示小豆现在有的碱基串。

第三行开始接下来 $k$ 行表示第 $i$ 个氨基酸可能的碱基序列,对于第 $i$ 个氨基酸,$a_i$ 表示这个氨基酸可能的碱基序列种数,接下来 $a_i$ 个字符串表示这 $a_i$ 种可能的碱基序列,用空格隔开。

输出

输出一个数,表示不同的方案数对 $10^9+7$ 取模后的结果(不同的方案数是指不同的子碱基串或者相同的碱基串不同的氨基酸排列方式)。

样例

样例输入 1

2 ABC 2 A AB 2 C BC

样例输出 1

2

样例输入 2

2 AAA 2 A AA 2 A AA

样例输出 2

4

提示

【样例 1 解释】

第一个选A第二个选C,得到AC能够与ABC产生 $0$ 种匹配方式。

第一个选A第二个选BC,得到ABC能够与ABC产生 $1$ 种匹配方式。

第一个选AB第二个选C,得到ABC能够与ABC产生 $1$ 种匹配方式。

第一个选AB第二个选BC,得到ABBC能够与ABC产生 $0$ 种匹配方式。

所以一共 $2$ 种。

【样例 2 解释】

第一个选A第二个选A,得到AA能够与AAA产生 $2$ 种匹配方式

第一个选A第二个选AA,得到AAA能够与AAA产生 $1$ 种匹配方式

第一个选AA第二个选A,得到AAA能够与AAA产生 $1$ 种匹配方式

第一个选AA第二个选AA,得到AAAA能够与AAA产生 $0$ 种匹配方式

所以一共 $4$ 种。

【数据规模与约定】

对于 $30\%$ 的数据,$1 \leq k \leq 25$,$|s| \leq 10000,a_i \leq 3$。

对于 $100\%$ 的数据,$1 \leq k \leq 100$,$|s| \leq 10000,a_i \leq 10$。