import fractions
import time
import copy
import random
import sys
sys.setrecursionlimit(1000000000)
class Node:
def setVal(this, val):
this.op = "value"
this.result = val
return this
def read(this):
if this.op == "value":
return this.result
leftVal = this.left.read()
rightVal = this.right.read()
if this.op == "concat":
mul = 1
tmp = rightVal
while tmp > 0:
mul *= 10
tmp //= 10
result = leftVal * mul + rightVal
elif this.op == "+":
result = leftVal + rightVal
elif this.op == "-":
result = leftVal - rightVal
elif this.op == "/":
result = leftVal / rightVal
elif this.op == "*":
result = leftVal * rightVal
return result
def setOp(this, leftNode, rightNode, typeOp):
this.left = leftNode
this.right = rightNode
this.op = typeOp
this.result = this.read()
return this
def getString(this):
if this.op == "value":
return str(this.result)
elif this.op == "concat":
return "(" + this.left.getString() + " " + this.right.getString() + ")"
else:
return "(" + this.left.getString() + this.op + this.right.getString() + ")"
ops = ["concat", "+", "-", "*", "/"]
n = int(input())
a = list(map(int, input().split()))
start_time = time.time()
node_vals = [Node().setVal(v) for v in a]
cur_val = float("inf")
cur_str = ""
use_time = 5
while time.time() - start_time < use_time:
tmp_node_vals = copy.deepcopy(node_vals)
random.shuffle(tmp_node_vals)
main = tmp_node_vals[0]
for i in range(1, n):
if i == 1:
use = random.randint(0, 4)
else:
use = random.randint(1, 4)
main = Node().setOp(main, tmp_node_vals[i], ops[use])
getVal = main.read()
result = main.getString()
if abs(getVal-100) < abs(cur_val-100):
cur_val = getVal
cur_str = result
print(cur_str)
Battle History