#ABC129-E Sum Equals Xor
"""
a+b = a^b
となる場合は、全2進数桁iに対して、
a[i] nand b[i] &1 を満たす場合になる
これは各桁に対してa[i]==b[i]==1を除く2**2-1の3通りが存在するので、
多分桁dpで制約あり/なしを求めてけば求まる
"""
import sys
readline = sys.stdin.buffer.readline
def even(n): return 1 if n%2==0 else 0
mod = 10**9+7
s = readline().rstrip().decode('utf-8')

################################
###########桁DP#################
################################

dp = [[0]*2 for i in range(len(s)+2)]
dp[0][0] = 1 #初期化



for i in range(len(s)):
    for j in range(2): #制約有り、なし
        nd = int(s[i])
        for d in range(3): #00,01,10 (11は条件を満たさない)
            ni = i+1
            nj = j
            if j == 0:
                if nd==0 and d > 0:continue #条件を満たさない
                elif nd == 1 and d==0:nj=1 #条件が必要なくなる遷移

            dp[ni][nj] += dp[i][j]
            dp[ni][nj]%=mod



ans = (dp[ni][0] + dp[ni][1])%mod
print(ans) """
a+b = a^b
となる場合は、全2進数桁iに対して、
a[i] nand b[i] &1 を満たす場合になる
これは各桁に対してa[i]==b[i]==1を除く2**2-1の3通りが存在するので、
多分桁dpで制約あり/なしを求めてけば求まる
""" import sys sys readline = sys.stdin.buffer.readline readline sys.stdin.buffer.readline sys.stdin.buffer sys.stdin sys stdin buffer readline def even(n): return 1 if n%2==0 else 0 even n n mod = 10**9+7 mod 10**9+7 10**9 10 9 7 s = readline().rstrip().decode('utf-8') s readline().rstrip().decode('utf-8') ().rstrip().decode ().rstrip() ().rstrip () readline rstrip decode 'utf-8' [0]*2 for i in range(len(s)+2) for i in range(len(s)+2) i range(len(s)+2) range len(s)+2 len(s) len s 2 for i in range(len(s)+2) [0]*2 [0] 0 2 dp = [[0]*2 for i in range(len(s)+2)] dp [[0]*2 for i in range(len(s)+2)] dp[0][0] = 1 dp[0][0] [0] dp 0 0 1 for i in range(len(s)):
    for j in range(2): #制約有り、なし
        nd = int(s[i])
        for d in range(3): #00,01,10 (11は条件を満たさない)
            ni = i+1
            nj = j
            if j == 0:
                if nd==0 and d > 0:continue #条件を満たさない
                elif nd == 1 and d==0:nj=1 #条件が必要なくなる遷移

            dp[ni][nj] += dp[i][j]
            dp[ni][nj]%=mod i range(len(s)) range len(s) len s for j in range(2): #制約有り、なし
        nd = int(s[i])
        for d in range(3): #00,01,10 (11は条件を満たさない)
            ni = i+1
            nj = j
            if j == 0:
                if nd==0 and d > 0:continue #条件を満たさない
                elif nd == 1 and d==0:nj=1 #条件が必要なくなる遷移

            dp[ni][nj] += dp[i][j]
            dp[ni][nj]%=mod j range(2) range 2 nd = int(s[i]) nd int(s[i]) int s[i] s i for d in range(3): #00,01,10 (11は条件を満たさない)
            ni = i+1
            nj = j
            if j == 0:
                if nd==0 and d > 0:continue #条件を満たさない
                elif nd == 1 and d==0:nj=1 #条件が必要なくなる遷移

            dp[ni][nj] += dp[i][j]
            dp[ni][nj]%=mod d range(3) range 3 ni = i+1 ni i+1 i 1 nj = j nj j if j == 0:
                if nd==0 and d > 0:continue #条件を満たさない
                elif nd == 1 and d==0:nj=1 #条件が必要なくなる遷移

             j == 0 j 0 if nd==0 and d > 0:continue #条件を満たさない
                elif nd == 1 and d==0:nj=1 #条件が必要なくなる遷移

             nd==0 and d > 0 nd==0 nd 0 d > 0 d 0 elif nd == 1 and d==0:nj=1 #条件が必要なくなる遷移

             nd == 1 and d==0 nd == 1 nd 1 d==0 d 0 dp[ni][nj] += dp[i][j] dp[ni][nj] [ni] dp ni nj dp[i][j] [i] dp i j dp[ni][nj]%=mod dp[ni][nj] [ni] dp ni nj mod ans = (dp[ni][0] + dp[ni][1])%mod ans (dp[ni][0] + dp[ni][1])%mod dp[ni][0] + dp[ni][1] dp[ni][0] [ni] dp ni 0 dp[ni][1] [ni] dp ni 1 mod print(ans) print ans nj = j j nj readline = sys.stdin.buffer.readline sys.stdin.buffer.readline readline nd = int(s[i]) int(s[i]) nd mod = 10**9+7 10**9+7 mod dp = [[0]*2 for i in range(len(s)+2)] [[0]*2 for i in range(len(s)+2)] dp ni = i+1 i+1 ni s = readline().rstrip().decode('utf-8') readline().rstrip().decode('utf-8') s def even(n): return 1 if n%2==0 else 0 def even(n): return 1 if n%2==0 else 0 even ans = (dp[ni][0] + dp[ni][1])%mod (dp[ni][0] + dp[ni][1])%mod ans
#ABC129-E Sum Equals Xor
"""
a+b = a^b
となる場合は、全2進数桁iに対して、
a[i] nand b[i] &1 を満たす場合になる
これは各桁に対してa[i]==b[i]==1を除く2**2-1の3通りが存在するので、
多分桁dpで制約あり/なしを求めてけば求まる
"""
import sys
readline = sys.stdin.buffer.readline
def even(n): return 1 if n%2==0 else 0
mod = 10**9+7
s = readline().rstrip().decode('utf-8')

################################
###########桁DP#################
################################

dp = [[0]*2 for i in range(len(s)+2)]
dp[0][0] = 1 #初期化



for i in range(len(s)):
    for j in range(2): #制約有り、なし
        nd = int(s[i])
        for d in range(3): #00,01,10 (11は条件を満たさない)
            ni = i+1
            nj = j
            if j == 0:
                if nd==0 and d > 0:continue #条件を満たさない
                elif nd == 1 and d==0:nj=1 #条件が必要なくなる遷移

            dp[ni][nj] += dp[i][j]
            dp[ni][nj]%=mod



ans = (dp[ni][0] + dp[ni][1])%mod
print(ans)