Problem:
式

与えられた 4 つの 1 から 9 の整数を使って、答えが 10 になる式をつくります。
4 つの整数 a, b, c, d を入力したとき、下記の条件に従い、答えが 10 になる式を出力するプログラムを作成してください。また、答えが複数ある時は、最初に見つかった答えだけを出力するものとします。答えがない時は、0 と出力してください。

演算子として、加算 (+)、減算 (-)、乗算 (*) だけを使います。除算 (/) は使いません。使用できる演算子は３個です。

数を4つとも使わなければいけません。

4つの数の順番は自由に入れ換えてかまいません。

カッコを使ってもかまいません。使用できるカッコは３組（６個）以下です。

Input

複数のデータセットが与えられます。各データセットの形式は以下のとおり：

a b c d

入力は４つの 0 で終了します。データセットの数は 40 を超えません。

Output

各データセットについて、与えられた 4 つの整数と上記の演算記号およびカッコを組み合わせて値が 10 となる式または 0 を１行に出力してください。式の文字列が 1024 文字を超えてはいけません。

Sample Input

8 7 9 9
4 4 4 4
5 5 7 5
0 0 0 0

Output for the Sample Input

((9 * (9 - 7)) - 8)
0
((7 * 5) - (5 * 5))

Solution in Python3 (judge verdict: Wrong Answer)

from collections import deque

def calculate1(x, y) :
    if   x == 0 : y.appendleft(y.popleft() + y.popleft())
    elif x == 1 : y.appendleft(y.popleft() - y.popleft())
    else : y.appendleft(y.popleft() * y.popleft())
    return y

def calculate2(x, y) :
    if   x == 0 : y.append(y.pop() + y.pop())
    elif x == 1 : y.append(y.pop() - y.pop())
    else : y.append(y.pop() * y.pop())
    return y

def search1(sample) :
    for first in range(3) :
        for second in range(3) :
            for third in range(3) :
                box = deque(sample)
                calculate1(first, box)
                calculate1(second, box)
                calculate1(third, box)
                if box[0] == 10 :
                    return(first,second,third)
                    break
                
def search2(sample) :
    for first in range(3) :
        for second in range(3) :
            for third in range(3) :
                box = deque(sample)
                calculate1(first, box)
                calculate2(second, box)
                calculate1(third, box)
                if box[0] == 10 :
                    return(first,second,third)
                    break

def attack(sample) :
    test = [[sample[a],sample[b],sample[c],sample[d]] for a in range(4) for b in range(4) for c in range(4) for d in range(4) if a!=b and a!=c and a!=d and b!=c and b!=d and c!=d]
    for _ in test : 
        result = search1(_)
        if result != None :
            return result, _, 1
            break
        else :
            result = search2(_)
            if result != None :
                return result, _, 2
                break

ams = ['+', '-', '*']
while True :
    sample = [int(_) for _ in input().split()]
    if sample == [0, 0, 0, 0] : break
    result  = attack(sample)
    if result != None :
        if result[2] == 1 : print('((({} {} {}) {} {}) {} {})'.format(result[1][0], ams[result[0][0]], result[1][1], ams[result[0][1]], result[1][2], ams[result[0][2]], result[1][3]))
        else : print('(({} {} {}) {} ({} {} {}))'.format(result[1][0], ams[result[0][0]], result[1][1], ams[result[0][2]], result[1][2], ams[result[0][1]], result[1][3]))
    else : print(0)