#6069. 基因序列

基因序列

题目描述

在生物信息学研究中,研究员常需要比较两段基因序列的相似度。现有两段由核苷酸编号组成的序列 AABB,长度分别为 NNMM。序列中的每个元素都是一个 [1,105][1, 10^5] 之间的整数。 在比对过程中,研究员会从序列 AA 中选出一个子序列 AA',再从序列 BB 中选出一个子序列 BB'

如果子序列 AA' 与子序列 BB' 完全相同(即长度相同且对应位置的元素相等),则称其为一对“匹配子序列对”。

需要注意的是:

  • 下标敏感:即使两个子序列所含的元素数值序列相同,只要选取的元素在原序列中的下标集合不同,就视为不同的子序列。
  • 空序列:根据研究定义,从 AABB 中均不选取任何元素所构成的空序列对 (,)(\emptyset, \emptyset),也算作一对匹配子序列对。
  • 子序列:从原序列中选择若干元素(可以不选),在不改变它们相对前后顺序的前提下,提取出来所组成的新序列。

请你编写程序,计算两段序列中共有多少对不同的“匹配子序列对”。由于答案可能很大,请输出对 109+710^9 + 7 取模后的结果。

输入格式

第一行包含两个整数 NNMM,分别表示序列 AABB 的长度。

第二行包含 NN 个整数,表示序列 AA 的各个元素。

第三行包含 MM 个整数,表示序列 BB 的各个元素。

输出格式

输出一个整数,表示匹配子序列对的总数对 109+710^9 + 7 取模后的结果。

样例

2 2
1 3
3 1
3
2 2
1 1
1 1
6

数据范围

对于 100%100\% 的数据,满足 1N,M20001 \leq N, M \leq 20001Ai,Bi1051 \leq A_i, B_i \leq 10^5