#P4591. [TJOI2018] 碱基序列

[TJOI2018] 碱基序列

题目描述

小豆参加了生物实验室。在实验室里,他主要研究蛋白质。他现在研究的蛋白质是由 kk 个氨基酸按一定顺序构成的。每一个氨基酸都可能有 aa 种碱基序列 si,js_{i,j} 构成。

现在小豆有一个碱基串 ss,小豆想知道在这个碱基上都多少种不同的组合方式可能得到这个蛋白质。即求由 kk 段字符串有序合并成的字符串 s1s_1,有多少种不同方式能够匹配字符串 ss,其中 kk 段字符串的选法不同,或者与 ss 匹配上的位置不同认为是不同的方式。

输入格式

第一行一个数,表示这个蛋白质由 kk 个氨基酸组成。

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

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

输出格式

输出一个数目标是不同的方案数(不同的方案数是指不同的子碱基串或者相同的碱基串不同的氨基酸排列方式)。

答案对 109+710^9+7 取模。

2
ABC
2 A AB
2 C BC
2
2
AAA
2 A AA
2 A AA
4

提示

样例 1 解释

  • 第一个选 A\tt A 第二个选 C\tt C,得到 AC\tt AC 能够与 ABC\tt ABC 产生 00 种匹配方式;
  • 第一个选 A\tt A 第二个选 BC\tt BC,得到 ABC\tt ABC 能够与 ABC\tt ABC 产生 11 种匹配方式;
  • 第一个选 AB\tt AB 第二个选 C\tt C,得到 ABC\tt ABC 能够与 ABC\tt ABC 产生 11 种匹配方式;
  • 第一个选 AB\tt AB 第二个选 BC\tt BC,得到 ABBC\tt ABBC 能够与 ABC\tt ABC 产生 00 种匹配方式。

所以一共 22 种。

样例 2 解释

  • 第一个选 A\tt A 第二个选 A\tt A,得到 AA\tt AA 能够与 AAA\tt AAA 产生 22 种匹配方式;
  • 第一个选 A\tt A 第二个选 AA\tt AA,得到 AAA\tt AAA 能够与 AAA\tt AAA 产生 11 种匹配方式;
  • 第一个选 AA\tt AA 第二个选 A\tt A,得到 AAA\tt AAA 能够与 AAA\tt AAA 产生 11 种匹配方式;
  • 第一个选 AA\tt AA 第二个选 AA\tt AA,得到 AAAA\tt AAAA 能够与 AAA\tt AAA 产生 00 种匹配方式。

所以一共 44 种。

数据范围及约定

  • 对于 30%30\% 的数据,1k251\leq k\leq 251s100001\le |s|\leq 100001ai31\le a_i\leq 3
  • 对于 100%100\% 的数据,1k1001\leq k\leq1001s100001\le |s|\leq 100001ai101\le a_i \leq10。碱基序列的长度均不超过 1515。字符集为大写字母。