# Python3 (3.4.3)
import sys
input = sys.stdin.readline

# -------------------------------------------------------------
# function
# -------------------------------------------------------------


# -------------------------------------------------------------
# main
# -------------------------------------------------------------
L = input().rstrip()

lenL = len(L)
mod = 10**9+7

dp0 = [0]*(lenL+1) # dp0[i] : 上からi桁目まで L と一致する (A,B) の場合の数
dp1 = [0]*(lenL+1) # dp1[i] : 上からi桁目までで L と一致しない (A,B) の場合の数

dp0[0] = 1

for i,l in enumerate(L, 1):
    # 現在の桁が 0 の時
    if l=="0":
        dp0[i] = dp0[i-1]   # (0,0) のみ
        dp1[i] = dp1[i-1]*3 # (0,0), (0,1), (1,0) の3通り
    # 現在の桁が 1 の時
    else:
        dp0[i] = dp0[i-1]*2 # (0,1), (1,0)
        dp1[i] = dp0[i-1] + dp1[i-1]*3 
        # (i-1)桁まで一致している場合, (0,0) のみ
        # (i-1)桁まで一致していない場合, (0,0), (0,1), (1,0) の3通り
    dp0[i] %= mod
    dp1[i] %= mod

print((dp0[-1] + dp1[-1]) % mod) import sys sys input = sys.stdin.readline input sys.stdin.readline sys.stdin sys stdin readline L = input().rstrip() L input().rstrip() ().rstrip () input rstrip lenL = len(L) lenL len(L) len L mod = 10**9+7 mod 10**9+7 10**9 10 9 7 dp0 = [0]*(lenL+1) dp0 [0]*(lenL+1) [0] 0 lenL+1 lenL 1 dp1 = [0]*(lenL+1) dp1 [0]*(lenL+1) [0] 0 lenL+1 lenL 1 dp0[0] = 1 dp0[0] dp0 0 1 for i,l in enumerate(L, 1):
    # 現在の桁が 0 の時
    if l=="0":
        dp0[i] = dp0[i-1]   # (0,0) のみ
        dp1[i] = dp1[i-1]*3 # (0,0), (0,1), (1,0) の3通り
    # 現在の桁が 1 の時
    else:
        dp0[i] = dp0[i-1]*2 # (0,1), (1,0)
        dp1[i] = dp0[i-1] + dp1[i-1]*3 
        # (i-1)桁まで一致している場合, (0,0) のみ
        # (i-1)桁まで一致していない場合, (0,0), (0,1), (1,0) の3通り
    dp0[i] %= mod
    dp1[i] %= mod i l enumerate(L, 1) enumerate L 1 if l=="0":
        dp0[i] = dp0[i-1]   # (0,0) のみ
        dp1[i] = dp1[i-1]*3 # (0,0), (0,1), (1,0) の3通り
    # 現在の桁が 1 の時
    else:
        dp0[i] = dp0[i-1]*2 # (0,1), (1,0)
        dp1[i] = dp0[i-1] + dp1[i-1]*3 
        # (i-1)桁まで一致している場合, (0,0) のみ
        # (i-1)桁まで一致していない場合, (0,0), (0,1), (1,0) の3通り
     l=="0" l "0" dp0[i] = dp0[i-1] dp0[i] dp0 i dp0[i-1] dp0 i-1 i 1 dp1[i] = dp1[i-1]*3 dp1[i] dp1 i dp1[i-1]*3 dp1[i-1] dp1 i-1 i 1 3 dp0[i] = dp0[i-1]*2 dp0[i] dp0 i dp0[i-1]*2 dp0[i-1] dp0 i-1 i 1 2 dp1[i] = dp0[i-1] + dp1[i-1]*3 dp1[i] dp1 i dp0[i-1] + dp1[i-1]*3 dp0[i-1] dp0 i-1 i 1 dp1[i-1]*3 dp1[i-1] dp1 i-1 i 1 3 dp0[i] %= mod dp0[i] dp0 i mod dp1[i] %= mod dp1[i] dp1 i mod print((dp0[-1] + dp1[-1]) % mod) print (dp0[-1] + dp1[-1]) % mod dp0[-1] + dp1[-1] dp0[-1] dp0 -1 dp1[-1] dp1 -1 mod input = sys.stdin.readline sys.stdin.readline input mod = 10**9+7 10**9+7 mod lenL = len(L) len(L) lenL dp0 = [0]*(lenL+1) [0]*(lenL+1) dp0 dp1 = [0]*(lenL+1) [0]*(lenL+1) dp1 L = input().rstrip() input().rstrip() L
# Python3 (3.4.3)
import sys
input = sys.stdin.readline

# -------------------------------------------------------------
# function
# -------------------------------------------------------------


# -------------------------------------------------------------
# main
# -------------------------------------------------------------
L = input().rstrip()

lenL = len(L)
mod = 10**9+7

dp0 = [0]*(lenL+1) # dp0[i] : 上からi桁目まで L と一致する (A,B) の場合の数
dp1 = [0]*(lenL+1) # dp1[i] : 上からi桁目までで L と一致しない (A,B) の場合の数

dp0[0] = 1

for i,l in enumerate(L, 1):
    # 現在の桁が 0 の時
    if l=="0":
        dp0[i] = dp0[i-1]   # (0,0) のみ
        dp1[i] = dp1[i-1]*3 # (0,0), (0,1), (1,0) の3通り
    # 現在の桁が 1 の時
    else:
        dp0[i] = dp0[i-1]*2 # (0,1), (1,0)
        dp1[i] = dp0[i-1] + dp1[i-1]*3 
        # (i-1)桁まで一致している場合, (0,0) のみ
        # (i-1)桁まで一致していない場合, (0,0), (0,1), (1,0) の3通り
    dp0[i] %= mod
    dp1[i] %= mod

print((dp0[-1] + dp1[-1]) % mod)
