N,M,*L = map(int, open(0).read().split())
S = L[:N]
T = L[N:]
MOD = 10**9+7
dp = [[0]*(M+1) for i in range(N+1)]
for i in range(N+1):
  dp[i][0] = 1
for j in range(M+1):
  dp[0][j] = 1
for i in range(1,N+1):
  for j in range(1,M+1):
    if S[i-1]==T[j-1]:
      dp[i][j] += dp[i][j-1]+dp[i-1][j]
    else:
      dp[i][j] += dp[i][j-1]+dp[i-1][j]-dp[i-1][j-1]
    dp[i][j] %= MOD
print(dp[N][M]) N,M,*L = map(int, open(0).read().split()) N map(int, open(0).read().split()) map int open(0).read().split() (0).read().split (0).read() (0).read (0) open 0 read split M *L L S = L[:N] S L[:N] L :N N T = L[N:] T L[N:] L N: N MOD = 10**9+7 MOD 10**9+7 10**9 10 9 7 [0]*(M+1) for i in range(N+1) for i in range(N+1) i range(N+1) range N+1 N 1 for i in range(N+1) [0]*(M+1) [0] 0 M+1 M 1 dp = [[0]*(M+1) for i in range(N+1)] dp [[0]*(M+1) for i in range(N+1)] for i in range(N+1):
  dp[i][0] = 1 i range(N+1) range N+1 N 1 dp[i][0] = 1 dp[i][0] [i] dp i 0 1 for j in range(M+1):
  dp[0][j] = 1 j range(M+1) range M+1 M 1 dp[0][j] = 1 dp[0][j] [0] dp 0 j 1 for i in range(1,N+1):
  for j in range(1,M+1):
    if S[i-1]==T[j-1]:
      dp[i][j] += dp[i][j-1]+dp[i-1][j]
    else:
      dp[i][j] += dp[i][j-1]+dp[i-1][j]-dp[i-1][j-1]
    dp[i][j] %= MOD i range(1,N+1) range 1 N+1 N 1 for j in range(1,M+1):
    if S[i-1]==T[j-1]:
      dp[i][j] += dp[i][j-1]+dp[i-1][j]
    else:
      dp[i][j] += dp[i][j-1]+dp[i-1][j]-dp[i-1][j-1]
    dp[i][j] %= MOD j range(1,M+1) range 1 M+1 M 1 if S[i-1]==T[j-1]:
      dp[i][j] += dp[i][j-1]+dp[i-1][j]
    else:
      dp[i][j] += dp[i][j-1]+dp[i-1][j]-dp[i-1][j-1]
     S[i-1]==T[j-1] S[i-1] S i-1 i 1 T[j-1] T j-1 j 1 dp[i][j] += dp[i][j-1]+dp[i-1][j] dp[i][j] [i] dp i j dp[i][j-1]+dp[i-1][j] dp[i][j-1] [i] dp i j-1 j 1 dp[i-1][j] [i-1] dp i-1 i 1 j dp[i][j] += dp[i][j-1]+dp[i-1][j]-dp[i-1][j-1] dp[i][j] [i] dp i j dp[i][j-1]+dp[i-1][j]-dp[i-1][j-1] dp[i][j-1]+dp[i-1][j] dp[i][j-1] [i] dp i j-1 j 1 dp[i-1][j] [i-1] dp i-1 i 1 j dp[i-1][j-1] [i-1] dp i-1 i 1 j-1 j 1 dp[i][j] %= MOD dp[i][j] [i] dp i j MOD print(dp[N][M]) print dp[N][M] [N] dp N M T = L[N:] L[N:] T dp = [[0]*(M+1) for i in range(N+1)] [[0]*(M+1) for i in range(N+1)] dp MOD = 10**9+7 10**9+7 MOD N,M,*L = map(int, open(0).read().split()) map(int, open(0).read().split()) N S = L[:N] L[:N] S M,*L = map(int, open(0).read().split()) map(int, open(0).read().split()) M
N,M,*L = map(int, open(0).read().split())
S = L[:N]
T = L[N:]
MOD = 10**9+7
dp = [[0]*(M+1) for i in range(N+1)]
for i in range(N+1):
  dp[i][0] = 1
for j in range(M+1):
  dp[0][j] = 1
for i in range(1,N+1):
  for j in range(1,M+1):
    if S[i-1]==T[j-1]:
      dp[i][j] += dp[i][j-1]+dp[i-1][j]
    else:
      dp[i][j] += dp[i][j-1]+dp[i-1][j]-dp[i-1][j-1]
    dp[i][j] %= MOD
print(dp[N][M])