Problem:
Score : 300 points

Problem Statement

You are given a string S consisting of digits between 1 and 9, inclusive.
You can insert the letter + into some of the positions (possibly none) between two letters in this string.
Here, + must not occur consecutively after insertion.

All strings that can be obtained in this way can be evaluated as formulas.

Evaluate all possible formulas, and print the sum of the results.

Constraints

1 \leq |S| \leq 10

All letters in S are digits between 1 and 9, inclusive.

Input

The input is given from Standard Input in the following format:

S

Output

Print the sum of the evaluated value over all possible formulas.

Sample Input 1

125

Sample Output 1

176

There are 4 formulas that can be obtained: 125, 1+25, 12+5 and 1+2+5. When each formula is evaluated,

125

1+25=26

12+5=17

1+2+5=8

Thus, the sum is 125+26+17+8=176.

Sample Input 2

9999999999

Sample Output 2

12656242944

Solution in Python (3.4.3) (judge verdict: Wrong Answer)

# 問題文
# 1 以上 9 以下の数字のみからなる文字列 S が与えられます。 この文字列の中で、あなたはこれら文字と文字の間のうち、いくつかの場所に + を入れることができます。 一つも入れなくてもかまいません。 ただし、+ が連続してはいけません。
# このようにして出来る全ての文字列を数式とみなし、和を計算することができます。
# ありうる全ての数式の値を計算し、その合計を出力してください。

# キーワード
# 2n2n 通りを調べる全探索 (bit 全探索)

# メモ化再帰が使えそう

# 方向性
# 普通に計算すると、+ のありなし　* n で2:2 3:4 4:8 2^n-1の通り数がある
# 1234
# input = 123

# 間に入れれる通り数をもとめる
input = input()
num_list = list(str(input))
binary_length = len(num_list) - 1

lists = []

# 間に入れれる数分の配列を作る
for i in range(2**binary_length):
    bi_array = []
    
    # 2進数の数字を求める
    num = i
    while num >= 1:
        bi_array.insert(0,int(num % 2) ) 
        num = num // 2 
    tmp_list = []
    for j in range(binary_length):
        if len(bi_array) > j:
            tmp_list.insert(0,bi_array[-j-1])
        else:
            tmp_list.insert(0,0)

    lists.append(tmp_list)

result_list = []
# 0なら数字をjoin,1ならjoinしない
for bi_list in lists:

    num_list = list(str(input))
    current_num = int(num_list[0])
    concat_num_list = []

    for i,binary in enumerate(bi_list):
        if binary == 0:
            current_num = current_num * 10 + int(num_list[i+1])
        else:
            concat_num_list.append(current_num)
            current_num = int(num_list[i+1])

        if i+1 == len(bi_list):
            concat_num_list.append(current_num)
    result_list.append(sum(concat_num_list))


# リストの中身をすべて合算する
result = sum(result_list)
print(result)