s = eval(input())

result_sum = 0 # 総和 

plus_count = len(s) - 1 # 集合の要素数



for bit in range(1 << plus_count): # bit全探索

  splitted_string = s[0] # 最初の数字を取る

  for iter_plus in range(plus_count):

    if bit & (1 << iter_plus): # ビットを立てる -> +を挿入する

      splitted_string += '+'

    splitted_string += s[iter_plus+1] # 適宜+が入った状態で数字列が構築

    

  # +で区切って,それぞれintに変換し合計

  splitted_integer = [int(x) for x in splitted_string.split('+')]

  result_sum += sum(splitted_integer)

print(result_sum)
def dfs(splitted: "the list of integer", a: int, b: int, depth: int) -> int:

  if len(splitted) == depth:

    return a + b

  else:

    # 左のdfs() 呼び出し -> +を挿入しなかったとき

    # 右のdfs() 呼び出し -> +を挿入したとき

    return dfs(splitted, a, b * 10, depth + 1) + dfs(splitted, a + b, splitted[depth], depth + 1)



s = [int(x) for x in eval(input())]

print((dfs(s, 0, 0, 0)))
s = eval(input())
result_sum = 0  # 総和
plus_count = len(s) - 1  # 集合の要素数
for bit in range(1 << plus_count):  # bit全探索
    splitted_string = s[0]  # 最初の数字を取る
    for iter_plus in range(plus_count):
        if bit & (1 << iter_plus):  # ビットを立てる -> +を挿入する
            splitted_string += "+"
        splitted_string += s[iter_plus + 1]  # 適宜+が入った状態で数字列が構築
    # +で区切って,それぞれintに変換し合計
    splitted_integer = [int(x) for x in splitted_string.split("+")]
    result_sum += sum(splitted_integer)
print(result_sum)

def dfs(splitted: "the list of integer", a: int, b: int, depth: int) -> int:
    if len(splitted) == depth:
        return a + b
    else:
        # 左のdfs() 呼び出し -> +を挿入しなかったとき
        # 右のdfs() 呼び出し -> +を挿入したとき
        return dfs(splitted, a, b * 10, depth + 1) + dfs(
            splitted, a + b, splitted[depth], depth + 1
        )


s = [int(x) for x in eval(input())]
print((dfs(s, 0, 0, 0)))

-s = eval(input()) -result_sum = 0  # 総和 -plus_count = len(s) - 1  # 集合の要素数 -for bit in range(1 << plus_count):  # bit全探索 -    splitted_string = s[0]  # 最初の数字を取る -    for iter_plus in range(plus_count): -        if bit & (1 << iter_plus):  # ビットを立てる -> +を挿入する -            splitted_string += "+" -        splitted_string += s[iter_plus + 1]  # 適宜+が入った状態で数字列が構築 -    # +で区切って,それぞれintに変換し合計 -    splitted_integer = [int(x) for x in splitted_string.split("+")] -    result_sum += sum(splitted_integer) -print(result_sum) +def dfs(splitted: "the list of integer", a: int, b: int, depth: int) -> int: +    if len(splitted) == depth: +        return a + b +    else: +        # 左のdfs() 呼び出し -> +を挿入しなかったとき +        # 右のdfs() 呼び出し -> +を挿入したとき +        return dfs(splitted, a, b * 10, depth + 1) + dfs( +            splitted, a + b, splitted[depth], depth + 1 +        ) + + +s = [int(x) for x in eval(input())] +print((dfs(s, 0, 0, 0)))