# ABC129 E

L=input()
N=len(L)
p=10**9+7

def pow_k(x,n,p=10**9+7):
    if n==0:
        return 1
    K=1
    while n>1:
        if n%2!=0:
            K=(K*x)%p
        x=(x*x)%p
        n//=2
    return (K*x)%p


res=0
tmp=1
for i in reversed(range(N)):
    if L[N-1-i]=='1':
        res=(res+tmp*pow_k(3,i,p))%p
        tmp=(2*tmp)%p
print((res+tmp)%p)  L=input() L input() input N=len(L) N len(L) len L p=10**9+7 p 10**9+7 10**9 10 9 7 def pow_k(x,n,p=10**9+7):
    if n==0:
        return 1
    K=1
    while n>1:
        if n%2!=0:
            K=(K*x)%p
        x=(x*x)%p
        n//=2
    return (K*x)%p pow_k if n==0:
        return 1
     n==0 n 0 return 1 1 K=1 K 1 while n>1:
        if n%2!=0:
            K=(K*x)%p
        x=(x*x)%p
        n//=2
     n>1 n 1 if n%2!=0:
            K=(K*x)%p
         n%2!=0 n%2 n 2 0 K=(K*x)%p K (K*x)%p K*x K x p x=(x*x)%p x (x*x)%p x*x x x p n//=2 n 2 return (K*x)%p (K*x)%p K*x K x p x x n n p=10**9+7 p 10**9+7 10**9 10 9 7 res=0 res 0 tmp=1 tmp 1 for i in reversed(range(N)):
    if L[N-1-i]=='1':
        res=(res+tmp*pow_k(3,i,p))%p
        tmp=(2*tmp)%p i reversed(range(N)) reversed range(N) range N if L[N-1-i]=='1':
        res=(res+tmp*pow_k(3,i,p))%p
        tmp=(2*tmp)%p L[N-1-i]=='1' L[N-1-i] L N-1-i N-1 N 1 i '1' res=(res+tmp*pow_k(3,i,p))%p res (res+tmp*pow_k(3,i,p))%p res+tmp*pow_k(3,i,p) res tmp*pow_k(3,i,p) tmp pow_k(3,i,p) pow_k 3 i p p tmp=(2*tmp)%p tmp (2*tmp)%p 2*tmp 2 tmp p print((res+tmp)%p) print (res+tmp)%p res+tmp res tmp p L=input() input() L p=10**9+7 10**9+7 p res=(res+tmp*pow_k(3,i,p))%p (res+tmp*pow_k(3,i,p))%p res N=len(L) len(L) N tmp=1 1 tmp res=0 0 res def pow_k(x,n,p=10**9+7):
    if n==0:
        return 1
    K=1
    while n>1:
        if n%2!=0:
            K=(K*x)%p
        x=(x*x)%p
        n//=2
    return (K*x)%p def pow_k(x,n,p=10**9+7):
    if n==0:
        return 1
    K=1
    while n>1:
        if n%2!=0:
            K=(K*x)%p
        x=(x*x)%p
        n//=2
    return (K*x)%p pow_k tmp=(2*tmp)%p (2*tmp)%p tmp
# ABC129 E

L=input()
N=len(L)
p=10**9+7

def pow_k(x,n,p=10**9+7):
    if n==0:
        return 1
    K=1
    while n>1:
        if n%2!=0:
            K=(K*x)%p
        x=(x*x)%p
        n//=2
    return (K*x)%p


res=0
tmp=1
for i in reversed(range(N)):
    if L[N-1-i]=='1':
        res=(res+tmp*pow_k(3,i,p))%p
        tmp=(2*tmp)%p
print((res+tmp)%p) 