【cf494B】Obsessive String

2014年12月14日1,5840

Hamed has recently found a string t and suddenly became quite fond of it. He spent several days trying to find all occurrences of t in other strings he had. Finally he became tired and started thinking about the following problem. Given a string s how many ways are there to extract k ≥ 1 non-overlapping substrings from it such that each of them contains string tas a substring? More formally, you need to calculate the number of ways to choose two sequences a1, a2, …, ak andb1, b2, …, bk satisfying the following requirements:

  • k ≥ 1
  •   t is a substring of string saisai + 1sbi (string s is considered as 1-indexed).

As the number of ways can be rather large print it modulo 109 + 7.

Input

Input consists of two lines containing strings s and t (1 ≤ |s|, |t| ≤ 105). Each string consists of lowercase Latin letters.

Output

Print the answer in a single line.

Sample test(s)
input

output

input

output

input

output

 

题解

kmp预处理匹配点。。。

f[i]表示前i个的合法划分数。。

f[i]=f[i1] (表示将最后一个舍弃)

sum[i]=∑ f[k] (k<=i)

设上一个匹配点为last

f[i]+=sum[last1]+last 

即有两种情况

[1….L-1(这部分任意,只要合法,允许舍弃末尾)] [L…i] 这样划分

或者直接 k=1 即只有一个划分[L…i]

L<=last