Problem:
与えられた 4 つの 1 から 9 の整数を使って、答えが 10 になる式をつくります。 4 つの整数 a, b, c, d を入力したとき、下記の条件に従い、答えが 10 になる式を出力するプログラムを作成してください。また、答えが複数ある時は、最初に見つかった答えだけを出力するものとします。答えがない時は、0 と出力してください。    * 演算子として、加算 (+)、減算 (-)、乗算 (*) だけを使います。除算 (/) は使いません。使用できる演算子は３個です。   * 数を4つとも使わなければいけません。   * 4つの数の順番は自由に入れ換えてかまいません。   * カッコを使ってもかまいません。使用できるカッコは３組（６個）以下です。

Incorrect submission (verdict: Wrong Answer):
# -*- coding: utf-8 -*-
"""
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0041
"""
import sys
from itertools import permutations, product




def has_possibility(digits):
    
    result = False
    digits.sort(reverse=True)
    total = digits[0]
    for i in digits[1:]:
        if i < 2:
            total += i
        else:
            total *= i
    if total >= 10:
        result = True
    return result


def make_ten(digits):
    for a, b, c, d in permutations(digits, 4):
        for op1, op2, op3 in product(['+', '-', '*'], repeat=3):
            t1 = do_calc(a, b, op1)
            t2 = do_calc(t1, c, op2)
            t3 = do_calc(t2, d, op3)
            if t3 == 10:
                return '(({} {} {}) {} {}) {} {}'.format(a, op1, b, op2, c, op3, d)

            t1 = do_calc(a, b, op1)
            t2 = do_calc(c, d, op2)
            t3 = do_calc(t1, t2, op3)
            if t3 == 10:
                return '({} {} {}) {} ({} {} {})'.format(a, op1, b, op3, c, op2, d)
    return '0'


def do_calc(x, y, op):
    result = None
    if op == '+':
        result = x + y
    elif op == '-':
        result = x - y
    elif op == '*':
        result = x * y
    return result



Memo = {}
def solve(digits):
    digits.sort(reverse=True)
    data = ''.join(map(str, digits))
    if data in Memo:
        pass
    else:
        if has_possibility(digits):
            Memo[data] = make_ten(digits)
        else:
            Memo[data] = '0'
    return Memo[data]


def main(args):
    while True:
        digits = [int(x) for x in input().strip().split(' ')]
        if digits[0] == 0 and digits[1] == 0 and digits[2] == 0 and digits[3] == 0:
            break
        result = solve(digits)
        print(result)


if __name__ == '__main__':
    main(sys.argv[1:])

Fixed, accepted submission:
# -*- coding: utf-8 -*-
"""
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0041
"""
import sys
from itertools import permutations, product


def make_ten(digits):
    
    result = '0'
    for a, b, c, d in permutations(digits, 4): 
        if result != '0':
            break
        for op1, op2, op3 in product(['+', '-', '*'], repeat=3): #  ??????????????????????????????????????????????????????OK
            
            exp = '(({} {} {}) {} {}) {} {}'.format(a, op1, b, op2, c, op3, d)
            if eval(exp) == 10:
                result = exp
                break
            # 1, 3, 2
            exp= '(({} {} {}) {} ({} {} {}))'.format(a, op1, b, op2, c, op3, d)
            if eval(exp) == 10:
                result = exp
                break
            # 2, 1, 3
            exp = '(({} {} ({} {} {})) {} {})'.format(a, op1, b, op2, c, op3, d)
            if eval(exp) == 10:
                result = exp
                break
            # 3, 1, 2
            exp = '({} {} (({} {} {}) {} {}))'.format(a, op1, b, op2, c, op3, d)
            if eval(exp) == 10:
                result = exp
                break
            # 3, 2, 1
            exp = '({} {} ({} {} ({} {} {})))'.format(a, op1, b, op2, c, op3, d)
            if eval(exp) == 10:
                result = exp
                break
            # 2, 3, 1
            exp =  '(({} {} {}) {} ({} {} {}))'.format(a, op1, b, op2, c, op3, d)
            if eval(exp) == 10:
                result = exp
                break
    return result




Memo = {}
def solve(digits):
    global Memo
    digits.sort(reverse=True)   
    data = ''.join(map(str, digits))
    if not data in Memo:
        Memo[data] = make_ten(digits)
    return Memo[data]


def main(args):
    while True:
        digits = [int(x) for x in input().strip().split(' ')]
        # digits = [int(x) for x in '{:04d}'.format(count)]
        if digits[0] == 0 and digits[1] == 0 and digits[2] == 0 and digits[3] == 0:
            break
        result = solve(digits)
        print(result)


if __name__ == '__main__':
    main(sys.argv[1:])