← Home
 ```go
package main

import (
	"bufio"
	"fmt"
	"os"
)

const MOD = 1000000007

func main() {
	scanner := bufio.NewScanner(os.Stdin)
	scanner.Buffer(make([]byte, 1024), 1024*1024)
	
	scanner.Scan()
	s := scanner.Text()
	scanner.Scan()
	t := scanner.Text()
	
	n, m := len(s), len(t)
	
	isStart := make([]bool, n)
	if m <= n {
		pi := make([]int, m)
		for i := 1; i < m; i++ {
			j := pi[i-1]
			for j > 0 && t[i] != t[j] {
				j = pi[j-1]
			}
			if t[i] == t[j] {
				j++
			}
			pi[i] = j
		}
		
		j := 0
		for i := 0; i < n; i++ {
			for j > 0 && s[i] != t[j] {
				j = pi[j-1]
			}
			if s[i] == t[j] {
				j++
			}
			if j == m {
				isStart[i-m+1] = true
				j = pi[j-1]
			}
		}
	}
	
	curr := -1
	dp := make([]int, n+1)
	pref := make([]int, n+1)
	dp[0] = 1
	pref[0] = 1
	
	for i := 1; i <= n; i++ {
		if i >= m && isStart[i-m] {
			curr = i - m
		}
		dp[i] = dp[i-1]
		if curr >= 0 {
			dp[i] = (dp[i] + pref[curr]) % MOD
		}
		pref[i] = (pref[i-1] + dp[i]) % MOD
	}
	
	ans := (dp[n] - 1 + MOD) % MOD
	fmt.Println(ans)
}
```