#ATabc130e. [ABC130E] Common Subsequence

[ABC130E] Common Subsequence

AT_abc130_e [ABC130E] Common Subsequence

题目描述

给定一个由 1110510^5 之间的整数构成的长度为 NN 的整数列 SS 和一个长度为 MM 的整数列 TT

请计算有多少对 SS 的子序列和 TT 的子序列,使得它们作为整数列是相等的。

这里,整数列 AA 的子序列是指,从 AA 中选择若干(可以为 00 个)元素删除,剩下的元素按照原顺序排列所得到的整数列。

另外,即使 SSTT 的子序列作为整数列相等,只要删除的元素下标集合不同,也要将其视为不同的子序列。

由于答案可能非常大,请输出对 109+710^9+7 取模后的结果。

输入格式

输入以如下格式从标准输入给出。

NN MM S1S_1 S2S_2 \ldots SNS_{N} T1T_1 T2T_2 \ldots TMT_{M}

输出格式

请输出作为整数列相等的 SSTT 的子序列对的个数,对 109+710^9+7 取模后的结果。

样例 1

输入

2 2
1 3
3 1

输出

3

样例 2

输入

2 2
1 1
1 1

输出

6

样例 3

输入

4 4
3 4 5 6
3 4 5 6

输出

16

样例 4

输入

10 9
9 6 5 7 5 9 8 5 6 7
8 6 8 5 5 7 9 9 7

输出

191

样例 5

输入

20 20
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

输出

846527861

说明/提示

限制条件

  • 1N,M2×1031 \leq N, M \leq 2 \times 10^3
  • SS 的长度为 NN
  • TT 的长度为 MM
  • 1Si,Ti1051 \leq S_i, T_i \leq 10^5
  • 输入均为整数

样例解释 1

SS 的子序列有 (), (1), (3), (1,3)(),\ (1),\ (3),\ (1, 3)TT 的子序列有 (), (3), (1), (3,1)(),\ (3),\ (1),\ (3, 1)。两者都为 ()() 的组合有 1×11 \times 1 种,都为 (1)(1) 的组合有 1×11 \times 1 种,都为 (3)(3) 的组合有 1×11 \times 1 种,因此共有 33 种组合。

样例解释 2

SS 的子序列有 (), (1), (1), (1,1)(),\ (1),\ (1),\ (1, 1)TT 的子序列有 (), (1), (1), (1,1)(),\ (1),\ (1),\ (1, 1)。两者都为 ()() 的组合有 1×11 \times 1 种,都为 (1)(1) 的组合有 2×22 \times 2 种,都为 (1,1)(1, 1) 的组合有 1×11 \times 1 种,因此共有 66 种组合。请注意,对于子序列,删除元素的下标集合不同的情况要区分开来。

样例解释 5

请注意输出时需要对 109+710^9+7 取模。

由 ChatGPT 4.1 翻译