#jag2017autumnh. [jag2017autumn_h]Separate String

[jag2017autumn_h]Separate String

题目描述

给定一个字符串 tt 和一个包含 NN 个不同字符串的集合 SS,你需要将 tt 分割成若干部分,使得每一部分都包含在 SS 中。

例如,当 t=ababt = ababS={a,ab,b}S = \{a, ab, b\} 时,以下四种分割方法满足条件:

  • a,b,a,ba, b, a, b
  • a,b,aba, b, ab
  • ab,a,bab, a, b
  • ab,abab, ab

你的任务是计算分割 tt 的方法数。由于结果可能很大,你应该输出除以 1,000,000,0071{,}000{,}000{,}007 的余数。


输入

输入包含一个测试用例,格式如下:

NN s1s_1 \vdots sNs_N tt

第一行是一个整数 NN (1N100,0001 \le N \le 100{,}000),表示 SS 中元素的数量。接下来的 NN 行中,每行包含一个不同的字符串,用换行符分隔。第 ii 个字符串 sis_i 表示 SS 的第 ii 个元素。sis_i 由小写字母组成,长度在 11100,000100{,}000 之间(包含边界)。sis_i 的长度之和 si (1iN)\sum s_i \ (1 \le i \le N) 最多为 200,000200{,}000。最后一行是一个字符串 tt,由小写字母组成,表示要分割的字符串,长度在 11100,000100{,}000 之间(包含边界)。

输出

计算将 tt 分割的方法数,并打印除以 1,000,000,0071{,}000{,}000{,}007 的余数。


示例输入1

3
a
b
ab
abab

示例输出1

4

示例输入2

3
a
b
c
xyz

示例输出2

0

示例输入3

7
abc
ab
bc
a
b
c
aa
aaabcbccababbc

示例输出3

160

示例输入4

10
a
aa
aaa
aaaa
aaaaa
aaaaaa
aaaaaaa
aaaaaaaa
aaaaaaaaa
aaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

示例输出4

461695029