MOD = 10**9+7

L=input()
N = len(L)
ans = 0
num = 0 # Lの先頭iケタにおける1の個数
cum_one_cnt = [0]*(N+1)
for i in range(N):
    length = N-i-1
    if L[i] == "1":
        ans += pow(3, length, MOD) * pow(2, num, MOD) % MOD
        ans %= MOD
        num += 1 # 1を発見したので1つ加算

# 最後のパターンのみ特殊(フリーなケタがない)
ans += pow(2, num, MOD)
print(ans%MOD) MOD = 10**9+7 MOD 10**9+7 10**9 10 9 7 L=input() L input() input N = len(L) N len(L) len L ans = 0 ans 0 num = 0 num 0 cum_one_cnt = [0]*(N+1) cum_one_cnt [0]*(N+1) [0] 0 N+1 N 1 for i in range(N):
    length = N-i-1
    if L[i] == "1":
        ans += pow(3, length, MOD) * pow(2, num, MOD) % MOD
        ans %= MOD
        num += 1 # 1を発見したので1つ加算

# 最後のパターンのみ特殊(フリーなケタがない) i range(N) range N length = N-i-1 length N-i-1 N-i N i 1 if L[i] == "1":
        ans += pow(3, length, MOD) * pow(2, num, MOD) % MOD
        ans %= MOD
        num += 1 # 1を発見したので1つ加算

# 最後のパターンのみ特殊(フリーなケタがない) L[i] == "1" L[i] L i "1" ans += pow(3, length, MOD) * pow(2, num, MOD) % MOD ans pow(3, length, MOD) * pow(2, num, MOD) % MOD pow(3, length, MOD) * pow(2, num, MOD) pow(3, length, MOD) pow 3 length MOD pow(2, num, MOD) pow 2 num MOD MOD ans %= MOD ans MOD num += 1 num 1 ans += pow(2, num, MOD) ans pow(2, num, MOD) pow 2 num MOD print(ans%MOD) print ans%MOD ans MOD N = len(L) len(L) N ans += pow(2, num, MOD) pow(2, num, MOD) ans L=input() input() L num = 0 0 num ans = 0 0 ans length = N-i-1 N-i-1 length ans += pow(3, length, MOD) * pow(2, num, MOD) % MOD pow(3, length, MOD) * pow(2, num, MOD) % MOD ans ans %= MOD MOD ans cum_one_cnt = [0]*(N+1) [0]*(N+1) cum_one_cnt MOD = 10**9+7 10**9+7 MOD num += 1 1 num
MOD = 10**9+7

L=input()
N = len(L)
ans = 0
num = 0 # Lの先頭iケタにおける1の個数
cum_one_cnt = [0]*(N+1)
for i in range(N):
    length = N-i-1
    if L[i] == "1":
        ans += pow(3, length, MOD) * pow(2, num, MOD) % MOD
        ans %= MOD
        num += 1 # 1を発見したので1つ加算

# 最後のパターンのみ特殊(フリーなケタがない)
ans += pow(2, num, MOD)
print(ans%MOD)