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 Ruby (judge verdict: Wrong Answer)

ops = ["+", "-", "*", "/"]

def calc a, op, b
  case op
  when "+"
    a + b
  when "-"
    a - b
  when "*"
    a * b
  when "/"
    if b == 0
      10000000
    else
      a / b
    end
  end
end

loop do
  input = gets.split.map{|v| v.to_i}
  if input == [0, 0, 0, 0]
    exit
  end

  f = false
  input.permutation do |a|
    for i in 0 .. 3 do
      for j in 0 .. 3 do
        for k in 0 .. 3 do
          if calc(calc(calc(a[0], ops[i], a[1]), ops[j], a[2]), ops[k], a[3]) == 10
            puts ("(%d " + ops[i] + " %d) " + ops[j] + " (%d " + ops[k] + " %d)") % a
            f = true
            break
          end
          if calc(calc(a[0], ops[i], a[1]), ops[j], calc(a[2], ops[k], a[3])) == 10
            puts ("((%d " + ops[i] + " %d) " + ops[j] + " %d) " + ops[k] + " %d") % a
            f = true
            break
          end
        end
        break if f
      end
      break if f
    end
    break if f
  end
  puts 0 unless f
end