#P1068. 日志片段拼接

日志片段拼接

题目描述

数据中心保存了一份长度为 nn 的原始日志 SS,以及一份长度为 mm 的待复原记录 TT。两个字符串都只包含小写英文字母。

现在需要从原始日志 SS 中选出恰好 kk 个非空连续片段,并按照它们在 SS 中从左到右出现的顺序依次拼接。

所选择的任意两个片段不能覆盖同一个位置。将这 kk 个片段拼接后,得到的字符串必须恰好等于 TT

两个方案只要选择的片段位置不同,就被视为不同方案,即使它们取出的字符内容完全相同。

请计算满足要求的片段选择方案数。

由于答案可能很大,请输出答案对 10000000071000000007 取模后的结果。

输入格式

第一行包含三个整数 n,m,kn,m,k,分别表示原始日志 SS 的长度、待复原记录 TT 的长度,以及需要选择的片段数量。

第二行包含一个长度为 nn 的字符串 SS

第三行包含一个长度为 mm 的字符串 TT

字符串 SSTT 均只包含小写英文字母。

输出格式

输出一个整数,表示满足要求的方案数对 10000000071000000007 取模后的结果。

样例

7 3 1
abacaba
aba
2
7 3 2
abacaba
aba
8
5 3 3
aaaaa
aaa
10

样例说明

第一个样例中,只选择一个连续片段。字符串 aba 在原始日志中出现了两次,对应位置分别为 [1,3][1,3][5,7][5,7],因此答案为 22

第二个样例要求选择恰好两个互不重叠的非空片段。满足拼接结果为 aba 的方案共有 88 种。

第三个样例中需要选择三个片段,而目标字符串长度也为 33,因此每个片段都只能包含一个字符。从原始日志的 55 个位置中选择 33 个位置,共有 1010 种方案。

数据范围

测试点编号 数据范围
11 1n5001\leq n\leq 5001m501\leq m\leq 50k=1k=1
232\sim 3 1n5001\leq n\leq 5001m501\leq m\leq 50k=2k=2
454\sim 5 1n5001\leq n\leq 5001m501\leq m\leq 50k=mk=m
676\sim 7 1n5001\leq n\leq 5001m501\leq m\leq 501km1\leq k\leq m
898\sim 9 1n10001\leq n\leq 10001m1001\leq m\leq 1001km1\leq k\leq m
1010 1n10001\leq n\leq 10001m2001\leq m\leq 2001km1\leq k\leq m

对于全部数据:

  • 1n10001\leq n\leq 1000
  • 1m2001\leq m\leq 200
  • 1km1\leq k\leq m