import sys
input = sys.stdin.readline

def I(): return int(input())
def MI(): return map(int, input().split())
def LI(): return list(map(int, input().split()))

def main():
    mod=10**9+7
    L=list(input())
    N=len(L)
    
    #桁dp
    dpl=[0]*(N+1)
    dpt=[0]*(N+1)
    dpt[0]=1
    
    
    for i in range(N):
        if L[i]=="1":
            dpl[i+1]=(dpl[i]*3+dpt[i])%mod#00,01,10,  00
            dpt[i+1]=(dpt[i]*2)%mod
        else:
            dpl[i+1]=(dpl[i]*3)%mod#00,01,10
            dpt[i+1]=dpt[i]
            
    ans=(dpl[-2]+dpt[-2])%mod
    print(ans)
            
            
            

main() import sys sys input = sys.stdin.readline input sys.stdin.readline sys.stdin sys stdin readline def I(): return int(input()) I def MI(): return map(int, input().split()) MI def LI(): return list(map(int, input().split())) LI def main():
    mod=10**9+7
    L=list(input())
    N=len(L)
    
    #桁dp
    dpl=[0]*(N+1)
    dpt=[0]*(N+1)
    dpt[0]=1
    
    
    for i in range(N):
        if L[i]=="1":
            dpl[i+1]=(dpl[i]*3+dpt[i])%mod#00,01,10,  00
            dpt[i+1]=(dpt[i]*2)%mod
        else:
            dpl[i+1]=(dpl[i]*3)%mod#00,01,10
            dpt[i+1]=dpt[i]
            
    ans=(dpl[-2]+dpt[-2])%mod
    print(ans)
            
            
             main mod=10**9+7 mod 10**9+7 10**9 10 9 7 L=list(input()) L list(input()) list input() input N=len(L) N len(L) len L dpl=[0]*(N+1) dpl [0]*(N+1) [0] 0 N+1 N 1 dpt=[0]*(N+1) dpt [0]*(N+1) [0] 0 N+1 N 1 dpt[0]=1 dpt[0] dpt 0 1 for i in range(N):
        if L[i]=="1":
            dpl[i+1]=(dpl[i]*3+dpt[i])%mod#00,01,10,  00
            dpt[i+1]=(dpt[i]*2)%mod
        else:
            dpl[i+1]=(dpl[i]*3)%mod#00,01,10
            dpt[i+1]=dpt[i]
            
     i range(N) range N if L[i]=="1":
            dpl[i+1]=(dpl[i]*3+dpt[i])%mod#00,01,10,  00
            dpt[i+1]=(dpt[i]*2)%mod
        else:
            dpl[i+1]=(dpl[i]*3)%mod#00,01,10
            dpt[i+1]=dpt[i]
            
     L[i]=="1" L[i] L i "1" dpl[i+1]=(dpl[i]*3+dpt[i])%mod dpl[i+1] dpl i+1 i 1 (dpl[i]*3+dpt[i])%mod dpl[i]*3+dpt[i] dpl[i]*3 dpl[i] dpl i 3 dpt[i] dpt i mod dpt[i+1]=(dpt[i]*2)%mod dpt[i+1] dpt i+1 i 1 (dpt[i]*2)%mod dpt[i]*2 dpt[i] dpt i 2 mod dpl[i+1]=(dpl[i]*3)%mod dpl[i+1] dpl i+1 i 1 (dpl[i]*3)%mod dpl[i]*3 dpl[i] dpl i 3 mod dpt[i+1]=dpt[i] dpt[i+1] dpt i+1 i 1 dpt[i] dpt i ans=(dpl[-2]+dpt[-2])%mod ans (dpl[-2]+dpt[-2])%mod dpl[-2]+dpt[-2] dpl[-2] dpl -2 dpt[-2] dpt -2 mod print(ans) print ans main() main input = sys.stdin.readline sys.stdin.readline input def I(): return int(input()) def I(): return int(input()) I def LI(): return list(map(int, input().split())) def LI(): return list(map(int, input().split())) LI def main():
    mod=10**9+7
    L=list(input())
    N=len(L)
    
    #桁dp
    dpl=[0]*(N+1)
    dpt=[0]*(N+1)
    dpt[0]=1
    
    
    for i in range(N):
        if L[i]=="1":
            dpl[i+1]=(dpl[i]*3+dpt[i])%mod#00,01,10,  00
            dpt[i+1]=(dpt[i]*2)%mod
        else:
            dpl[i+1]=(dpl[i]*3)%mod#00,01,10
            dpt[i+1]=dpt[i]
            
    ans=(dpl[-2]+dpt[-2])%mod
    print(ans)
            
            
             def main():
    mod=10**9+7
    L=list(input())
    N=len(L)
    
    #桁dp
    dpl=[0]*(N+1)
    dpt=[0]*(N+1)
    dpt[0]=1
    
    
    for i in range(N):
        if L[i]=="1":
            dpl[i+1]=(dpl[i]*3+dpt[i])%mod#00,01,10,  00
            dpt[i+1]=(dpt[i]*2)%mod
        else:
            dpl[i+1]=(dpl[i]*3)%mod#00,01,10
            dpt[i+1]=dpt[i]
            
    ans=(dpl[-2]+dpt[-2])%mod
    print(ans)
            
            
             main def MI(): return map(int, input().split()) def MI(): return map(int, input().split()) MI
import sys
input = sys.stdin.readline

def I(): return int(input())
def MI(): return map(int, input().split())
def LI(): return list(map(int, input().split()))

def main():
    mod=10**9+7
    L=list(input())
    N=len(L)
    
    #桁dp
    dpl=[0]*(N+1)
    dpt=[0]*(N+1)
    dpt[0]=1
    
    
    for i in range(N):
        if L[i]=="1":
            dpl[i+1]=(dpl[i]*3+dpt[i])%mod#00,01,10,  00
            dpt[i+1]=(dpt[i]*2)%mod
        else:
            dpl[i+1]=(dpl[i]*3)%mod#00,01,10
            dpt[i+1]=dpt[i]
            
    ans=(dpl[-2]+dpt[-2])%mod
    print(ans)
            
            
            

main()
