#P6693. 谷歌翻(sheng)译(cao)机

    ID: 5568 Type: RemoteJudge 1500ms 512MiB Tried: 0 Accepted: 0 Difficulty: 5 Uploaded By: Tags>动态规划,dp2020O2优化前缀和

谷歌翻(sheng)译(cao)机

题目背景

小 L 最近沉迷用谷歌生草机生草一些奇奇怪怪的东西。

小 L 在生草出了各式各样的作品后便开始考虑这样一个问题。

题目描述

注:为了方便描述,下文所有字符串起始位置都为 11,即都从 11 开始标号。

小 L 将每次生草前的原文和生草后的结果看作两个仅由小写字母组成的两个字符串 AABB

我们按如下方式定义「分割数列」和「分割串」:

  • 对于一个长度为 nn 的字符串,定义它的一条「分割数列」为:存在长度为 k+2k+2 的数列 pp,使得 0=p0<p1<p2<...<pk<pk+1=n+10=p_0<p_1<p_2<...<p_k<p_{k+1}=n+1。对于一条「分割数列」,定义其「分割串」为 pi+1p_i+1pi+11p_{i+1}-1 之间字符构成的子串(i[0,k]i \in[0,k],可以为空串)。显然,对于一条长度为 k+2k+2 的分割数列,一共有 k+1k+1 个分割串。

  • 对于同一个字符串,两条分割数列(ppqq)不同当且仅当两条数列长度不同(k1k2k_1\neq k_2,或存在 ii 使得 piqip_i\neq q_i

不同人对于同样的原文和结果,他们的理解方式都是不同的。我们按如下方式定义一种理解方式:

  • 对于字符串 AABB,我们为这两个字符串各找一条分割数列(ppqq),这两个分割数列满足以下要求:
  1. 两个分割数列长度相等(k1=k2k_1=k_2)。
  2. 对于任意 ii,有 A[pi]=B[qi]A[p_i]=B[q_i],即 AApip_i 个位置的字符与 BBqiq_i 个位置的字符相同
  • 定义这种理解方式的「生草程度」为此时两个字符串的所有分割串长度的平方和,即 $\sum\limits_{i=0}^{k_1}(p_{i+1}-p_i-1)^2+\sum\limits_{i=0}^{k_2}(q_{i+1}-q_i-1)^2$。

  • 两种理解方式不同当且仅当两种理解方式的 pp 不同,或两种理解方式的 qq 不同。

小 L 想要知道所有理解方式的生草程度之和的结果。由于他不喜欢 109+710^9+7 这个数,他不希望你告诉他的结果会是这个数,所以你要将结果对 109+710^9+7 取模。

输入格式

第一行有两个正整数 n,mn,m 分别为 AABB 的长度。

接下来一行有一个长度为 nn 的字符串,表示字符串 AA

接下来一行有一个长度为 mm 的字符串,表示字符串 BB

输出格式

一行,一个整数,表示答案对 109+710^9+7 取模的结果。

3 4
abc
bacb

74
7 9
adcbbde
bdaegbcba

2128

提示

对于样例一,一共有以下理解方式:

  • p={0,4},q={0,5}p=\{0,4\},q=\{0,5\},生草程度为 2525
  • p={0,1,4},q={0,2,5}p=\{0,1,4\},q=\{0,2,5\},生草程度为 99
  • p={0,2,4},q={0,1,5}p=\{0,2,4\},q=\{0,1,5\},生草程度为 1111
  • p={0,2,4},q={0,4,5}p=\{0,2,4\},q=\{0,4,5\},生草程度为 1111
  • p={0,3,4},q={0,3,5}p=\{0,3,4\},q=\{0,3,5\},生草程度为 99
  • p={0,1,2,4},q={0,2,4,5}p=\{0,1,2,4\},q=\{0,2,4,5\},生草程度为 33
  • p={0,1,3,4},q={0,2,3,5}p=\{0,1,3,4\},q=\{0,2,3,5\},生草程度为 33
  • p={0,2,3,4},q={0,1,3,5}p=\{0,2,3,4\},q=\{0,1,3,5\},生草程度为 33

总生草程度为 7474

数据范围

本题采用捆绑测试。

  • Subtask 1( 20%20\% ):n,m50n,m\leq 50
  • Subtask 2( 30%30\% ):n,m200n,m\leq 200
  • Subtask 3( 50%50\% ):无特殊限制。

对于 100%100\% 的数据,n,m3000n,m\leq 3000AABB 仅包含小写字母