l=list(input())

MOD=10**9+7
#桁DP
#各桁にとりうる値は、(0,1),(1,0),(0,0)の3パターン
#ただし、(0,1)が取れないケースもある（ギリギリの値）
#i桁目
#dp[i][smaller]

lenl=len(l)

dp=[[0]*2 for _ in range(lenl)]

#(0,0)
dp[0][0]=1
#(0,1),(1,0)
dp[0][1]=2

for i in range(1,lenl):
    if l[i]=="1":
        dp[i][0]+=(dp[i-1][0]*3+dp[i-1][1])%MOD
        dp[i][1]+=dp[i-1][1]*2%MOD
    else:
        dp[i][0]+=dp[i-1][0]*3%MOD
        dp[i][1]+=dp[i-1][1]%MOD

print(sum(dp[-1])%MOD)

 l=list(input()) l list(input()) list input() input MOD=10**9+7 MOD 10**9+7 10**9 10 9 7 lenl=len(l) lenl len(l) len l [0]*2 for _ in range(lenl) for _ in range(lenl) _ range(lenl) range lenl for _ in range(lenl) [0]*2 [0] 0 2 dp=[[0]*2 for _ in range(lenl)] dp [[0]*2 for _ in range(lenl)] dp[0][0]=1 dp[0][0] [0] dp 0 0 1 dp[0][1]=2 dp[0][1] [0] dp 0 1 2 for i in range(1,lenl):
    if l[i]=="1":
        dp[i][0]+=(dp[i-1][0]*3+dp[i-1][1])%MOD
        dp[i][1]+=dp[i-1][1]*2%MOD
    else:
        dp[i][0]+=dp[i-1][0]*3%MOD
        dp[i][1]+=dp[i-1][1]%MOD i range(1,lenl) range 1 lenl if l[i]=="1":
        dp[i][0]+=(dp[i-1][0]*3+dp[i-1][1])%MOD
        dp[i][1]+=dp[i-1][1]*2%MOD
    else:
        dp[i][0]+=dp[i-1][0]*3%MOD
        dp[i][1]+=dp[i-1][1]%MOD l[i]=="1" l[i] l i "1" dp[i][0]+=(dp[i-1][0]*3+dp[i-1][1])%MOD dp[i][0] [i] dp i 0 (dp[i-1][0]*3+dp[i-1][1])%MOD dp[i-1][0]*3+dp[i-1][1] dp[i-1][0]*3 dp[i-1][0] [i-1] dp i-1 i 1 0 3 dp[i-1][1] [i-1] dp i-1 i 1 1 MOD dp[i][1]+=dp[i-1][1]*2%MOD dp[i][1] [i] dp i 1 dp[i-1][1]*2%MOD dp[i-1][1]*2 dp[i-1][1] [i-1] dp i-1 i 1 1 2 MOD dp[i][0]+=dp[i-1][0]*3%MOD dp[i][0] [i] dp i 0 dp[i-1][0]*3%MOD dp[i-1][0]*3 dp[i-1][0] [i-1] dp i-1 i 1 0 3 MOD dp[i][1]+=dp[i-1][1]%MOD dp[i][1] [i] dp i 1 dp[i-1][1]%MOD dp[i-1][1] [i-1] dp i-1 i 1 1 MOD print(sum(dp[-1])%MOD) print sum(dp[-1])%MOD sum(dp[-1]) sum dp[-1] dp -1 MOD l=list(input()) list(input()) l MOD=10**9+7 10**9+7 MOD dp=[[0]*2 for _ in range(lenl)] [[0]*2 for _ in range(lenl)] dp lenl=len(l) len(l) lenl
l=list(input())

MOD=10**9+7
#桁DP
#各桁にとりうる値は、(0,1),(1,0),(0,0)の3パターン
#ただし、(0,1)が取れないケースもある（ギリギリの値）
#i桁目
#dp[i][smaller]

lenl=len(l)

dp=[[0]*2 for _ in range(lenl)]

#(0,0)
dp[0][0]=1
#(0,1),(1,0)
dp[0][1]=2

for i in range(1,lenl):
    if l[i]=="1":
        dp[i][0]+=(dp[i-1][0]*3+dp[i-1][1])%MOD
        dp[i][1]+=dp[i-1][1]*2%MOD
    else:
        dp[i][0]+=dp[i-1][0]*3%MOD
        dp[i][1]+=dp[i-1][1]%MOD

print(sum(dp[-1])%MOD)


