package main
import (
"fmt"
)
func main() {
var str string
for {
n, _ := fmt.Scan(&str)
if n == 0 {
break
} else {
fmt.Println(process(str, 0))
}
}
}
// func process(str string, i int) int {
// if i == len(str) {
// return 1
// }
// if i > len(str) {
// return 0
// }
// sum := 0
// if str[i] == '1' {
// sum += process(str, i+1) + process(str, i+2)
// } else if str[i] == '2' {
// sum = process(str, i+1)
// if i+1 < len(str) && str[i+1] >= '0' && str[i+1] <= '6'{
// sum += process(str, i+2)
// }
// } else if str[i] == '0' [
// sum = 0
// ] else {
// sum = process(str, i+1)
// }
// return sum
// }
func process(str string, i int) int {
// 先搞递归,再搞dp
// 对应初始化条件
// i == len(str) , dp[i] = 1
// i > len(str), dp[i] = 0
dp := make([]int, len(str)+2)
dp[len(str)] = 1
// 从后往前,要求的答案为dp[0]
for i:=len(str)-1; i>=0; i-- {
// 全部抄过来,process返回的就是dp[i+1], dp[i+2]对应的值
if str[i] == '1' {
dp[i] = dp[i+1] + dp[i+2]
} else if str[i] == '2' {
dp[i] = dp[i+1]
if i+1 < len(str) && str[i+1] >= '0' && str[i+1] <= '6' {
dp[i] += dp[i+2]
}
} else if str[i] == '0' {
dp[i] = 0
} else {
dp[i] = dp[i+1]
}
dp[i] = dp[i] % (1e9+7)
}
return dp[0]
}