L = input()
n = len(L)
csum_1 = [0] * n
csum_0 = [0] * n
now1 = 0
now0 = 0
for i in range(n):
    if L[i] == '1':
        now1 += 1
    else:
        now0 += 1
    csum_1[i] = now1
    csum_0[i] = now0

mod = 10**9+7
ans = 0
# iは、「最初にL[i]=1かつai=0かつbi=0となるindex」
for i in range(n):
    if L[i] == '1':
        p = 1
        # 自分より左側の0の度に2パターン増加
        if i >= 1:
            p *= pow(2,csum_1[i-1],mod)
        #print(p)
        # 自分より右側はどの桁も3パターン増加
        p *= pow(3,n-i-1,mod)
        #print(p)
        ans += p
        ans %= mod
# L=a+bの場合
p = pow(2,csum_1[-1],mod)
#print(p)
ans = (ans+p)%mod
print(ans) L = input() L input() input n = len(L) n len(L) len L csum_1 = [0] * n csum_1 [0] * n [0] 0 n csum_0 = [0] * n csum_0 [0] * n [0] 0 n now1 = 0 now1 0 now0 = 0 now0 0 for i in range(n):
    if L[i] == '1':
        now1 += 1
    else:
        now0 += 1
    csum_1[i] = now1
    csum_0[i] = now0 i range(n) range n if L[i] == '1':
        now1 += 1
    else:
        now0 += 1
     L[i] == '1' L[i] L i '1' now1 += 1 now1 1 now0 += 1 now0 1 csum_1[i] = now1 csum_1[i] csum_1 i now1 csum_0[i] = now0 csum_0[i] csum_0 i now0 mod = 10**9+7 mod 10**9+7 10**9 10 9 7 ans = 0 ans 0 for i in range(n):
    if L[i] == '1':
        p = 1
        # 自分より左側の0の度に2パターン増加
        if i >= 1:
            p *= pow(2,csum_1[i-1],mod)
        #print(p)
        # 自分より右側はどの桁も3パターン増加
        p *= pow(3,n-i-1,mod)
        #print(p)
        ans += p
        ans %= mod
# L=a+bの場合 i range(n) range n if L[i] == '1':
        p = 1
        # 自分より左側の0の度に2パターン増加
        if i >= 1:
            p *= pow(2,csum_1[i-1],mod)
        #print(p)
        # 自分より右側はどの桁も3パターン増加
        p *= pow(3,n-i-1,mod)
        #print(p)
        ans += p
        ans %= mod
# L=a+bの場合 L[i] == '1' L[i] L i '1' p = 1 p 1 if i >= 1:
            p *= pow(2,csum_1[i-1],mod)
        #print(p)
        # 自分より右側はどの桁も3パターン増加
         i >= 1 i 1 p *= pow(2,csum_1[i-1],mod) p pow(2,csum_1[i-1],mod) pow 2 csum_1[i-1] csum_1 i-1 i 1 mod p *= pow(3,n-i-1,mod) p pow(3,n-i-1,mod) pow 3 n-i-1 n-i n i 1 mod ans += p ans p ans %= mod ans mod p = pow(2,csum_1[-1],mod) p pow(2,csum_1[-1],mod) pow 2 csum_1[-1] csum_1 -1 mod ans = (ans+p)%mod ans (ans+p)%mod ans+p ans p mod print(ans) print ans now0 += 1 1 now0 ans = 0 0 ans p = 1 1 p now0 = 0 0 now0 csum_0 = [0] * n [0] * n csum_0 now1 += 1 1 now1 ans += p p ans ans = (ans+p)%mod (ans+p)%mod ans now1 = 0 0 now1 mod = 10**9+7 10**9+7 mod p *= pow(3,n-i-1,mod) pow(3,n-i-1,mod) p csum_1 = [0] * n [0] * n csum_1 p = pow(2,csum_1[-1],mod) pow(2,csum_1[-1],mod) p n = len(L) len(L) n L = input() input() L p *= pow(2,csum_1[i-1],mod) pow(2,csum_1[i-1],mod) p ans %= mod mod ans
L = input()
n = len(L)
csum_1 = [0] * n
csum_0 = [0] * n
now1 = 0
now0 = 0
for i in range(n):
    if L[i] == '1':
        now1 += 1
    else:
        now0 += 1
    csum_1[i] = now1
    csum_0[i] = now0

mod = 10**9+7
ans = 0
# iは、「最初にL[i]=1かつai=0かつbi=0となるindex」
for i in range(n):
    if L[i] == '1':
        p = 1
        # 自分より左側の0の度に2パターン増加
        if i >= 1:
            p *= pow(2,csum_1[i-1],mod)
        #print(p)
        # 自分より右側はどの桁も3パターン増加
        p *= pow(3,n-i-1,mod)
        #print(p)
        ans += p
        ans %= mod
# L=a+bの場合
p = pow(2,csum_1[-1],mod)
#print(p)
ans = (ans+p)%mod
print(ans)