# 各桁について3通りある
# (0,0) (1,0) (0,1)
# 3 ** 桁数すればよいのだが、たとえば100以下の数で101は選べないので、
# 桁DPで処理
# ・未満でない->未満でない : 1のときは2通り(1,0) (0,1)
# ・未満でない->未満でない : 0の時は1通り(0,0)
# ・未満でない->未満である : 1の時は1通り(0,0)
# ・未満でない->未満である : 0の時は0通り（未満にできない）
# ・未満である : 1でも0でも3通り(1,0)(0,1)(0,0)

# dp[i][smaller] = 場合の数

import sys
readline = sys.stdin.readline

L = readline().rstrip()
keta = len(L)
DIV = 10 ** 9 + 7

dp = [[0] * 2 for i in range(keta)]
dp[0][0] = 2 # 最初の桁は必ず1なので2通り
dp[0][1] = 1 # 未満になるタイミングで選べるのは1通り

for i in range(1, keta):
  x = L[i] # その桁の数
  if x == "1":
    dp[i][0] += dp[i - 1][0] * 2
    dp[i][1] += dp[i - 1][0] * 1
    dp[i][0] %= DIV
    dp[i][1] %= DIV
  else:
    dp[i][0] += dp[i - 1][0] * 1
    dp[i][0] %= DIV
  dp[i][1] += dp[i - 1][1] * 3
  dp[i][1] %= DIV

print((dp[keta - 1][0] + dp[keta - 1][1] ) % DIV) import sys sys readline = sys.stdin.readline readline sys.stdin.readline sys.stdin sys stdin readline L = readline().rstrip() L readline().rstrip() ().rstrip () readline rstrip keta = len(L) keta len(L) len L DIV = 10 ** 9 + 7 DIV 10 ** 9 + 7 10 ** 9 10 9 7 [0] * 2 for i in range(keta) for i in range(keta) i range(keta) range keta for i in range(keta) [0] * 2 [0] 0 2 dp = [[0] * 2 for i in range(keta)] dp [[0] * 2 for i in range(keta)] dp[0][0] = 2 dp[0][0] [0] dp 0 0 2 dp[0][1] = 1 dp[0][1] [0] dp 0 1 1 for i in range(1, keta):
  x = L[i] # その桁の数
  if x == "1":
    dp[i][0] += dp[i - 1][0] * 2
    dp[i][1] += dp[i - 1][0] * 1
    dp[i][0] %= DIV
    dp[i][1] %= DIV
  else:
    dp[i][0] += dp[i - 1][0] * 1
    dp[i][0] %= DIV
  dp[i][1] += dp[i - 1][1] * 3
  dp[i][1] %= DIV i range(1, keta) range 1 keta x = L[i] x L[i] L i if x == "1":
    dp[i][0] += dp[i - 1][0] * 2
    dp[i][1] += dp[i - 1][0] * 1
    dp[i][0] %= DIV
    dp[i][1] %= DIV
  else:
    dp[i][0] += dp[i - 1][0] * 1
    dp[i][0] %= DIV
   x == "1" x "1" dp[i][0] += dp[i - 1][0] * 2 dp[i][0] [i] dp i 0 dp[i - 1][0] * 2 dp[i - 1][0] [i - 1] dp i - 1 i 1 0 2 dp[i][1] += dp[i - 1][0] * 1 dp[i][1] [i] dp i 1 dp[i - 1][0] * 1 dp[i - 1][0] [i - 1] dp i - 1 i 1 0 1 dp[i][0] %= DIV dp[i][0] [i] dp i 0 DIV dp[i][1] %= DIV dp[i][1] [i] dp i 1 DIV dp[i][0] += dp[i - 1][0] * 1 dp[i][0] [i] dp i 0 dp[i - 1][0] * 1 dp[i - 1][0] [i - 1] dp i - 1 i 1 0 1 dp[i][0] %= DIV dp[i][0] [i] dp i 0 DIV dp[i][1] += dp[i - 1][1] * 3 dp[i][1] [i] dp i 1 dp[i - 1][1] * 3 dp[i - 1][1] [i - 1] dp i - 1 i 1 1 3 dp[i][1] %= DIV dp[i][1] [i] dp i 1 DIV print((dp[keta - 1][0] + dp[keta - 1][1] ) % DIV) print (dp[keta - 1][0] + dp[keta - 1][1] ) % DIV dp[keta - 1][0] + dp[keta - 1][1] dp[keta - 1][0] [keta - 1] dp keta - 1 keta 1 0 dp[keta - 1][1] [keta - 1] dp keta - 1 keta 1 1 DIV readline = sys.stdin.readline sys.stdin.readline readline L = readline().rstrip() readline().rstrip() L DIV = 10 ** 9 + 7 10 ** 9 + 7 DIV x = L[i] L[i] x dp = [[0] * 2 for i in range(keta)] [[0] * 2 for i in range(keta)] dp keta = len(L) len(L) keta
# 各桁について3通りある
# (0,0) (1,0) (0,1)
# 3 ** 桁数すればよいのだが、たとえば100以下の数で101は選べないので、
# 桁DPで処理
# ・未満でない->未満でない : 1のときは2通り(1,0) (0,1)
# ・未満でない->未満でない : 0の時は1通り(0,0)
# ・未満でない->未満である : 1の時は1通り(0,0)
# ・未満でない->未満である : 0の時は0通り（未満にできない）
# ・未満である : 1でも0でも3通り(1,0)(0,1)(0,0)

# dp[i][smaller] = 場合の数

import sys
readline = sys.stdin.readline

L = readline().rstrip()
keta = len(L)
DIV = 10 ** 9 + 7

dp = [[0] * 2 for i in range(keta)]
dp[0][0] = 2 # 最初の桁は必ず1なので2通り
dp[0][1] = 1 # 未満になるタイミングで選べるのは1通り

for i in range(1, keta):
  x = L[i] # その桁の数
  if x == "1":
    dp[i][0] += dp[i - 1][0] * 2
    dp[i][1] += dp[i - 1][0] * 1
    dp[i][0] %= DIV
    dp[i][1] %= DIV
  else:
    dp[i][0] += dp[i - 1][0] * 1
    dp[i][0] %= DIV
  dp[i][1] += dp[i - 1][1] * 3
  dp[i][1] %= DIV

print((dp[keta - 1][0] + dp[keta - 1][1] ) % DIV)