#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
struct element_t {
	int op;
	int val;
	friend bool operator<(const element_t& lhs, const element_t& rhs)
	{
		return lhs.op < rhs.op || (lhs.op == rhs.op && lhs.val < rhs.val);
	}
};
void disp(const element_t *e, int len)
{
	string s[4];
	int slen = 0, i;
	for (i = 0; i < 7; i ++) {
		if (e[i].op) {
			switch (e[i].op) {
			case 1:
				s[slen-2] = "(" + s[slen-2] + " + " + s[slen-1] + ")";
				slen --;
				break;
			case 2:
				s[slen-2] = "(" + s[slen-2] + " - " + s[slen-1] + ")";
				slen --;
				break;
			case 3:
				s[slen-2] = "(" + s[slen-2] + " * " + s[slen-1] + ")";
				slen --;
				break;
			}
		} else {
			char buf[10];
			sprintf (buf, "%d", e[i].val);
			s[slen++] = buf;
		}
	}
	cout << s[0] << endl;
}
int check(const element_t *e)
{
	int s[4], slen = 0, i;
	for (i = 0; i < 7; i ++) {
		if (e[i].op) {
			if (slen < 2)
				return 0;
			switch (e[i].op) {
			case 1:
				s[slen-2] += s[slen-1];
				slen --;
				break;
			case 2:
				s[slen-2] -= s[slen-1];
				slen --;
				break;
			case 3:
				s[slen-2] *= s[slen-1];
				slen --;
				break;
			}
		} else {
			s[slen++] = e[i].val;
		}
	}
	if (s[0] == 10) {
		disp(e, 7);
		return 1;
	}
	return 0;
}
int solve_op(const int *v, const int *op)
{
	element_t e[7];
	int i;
	for (i = 0; i < 4; i ++) {
		e[i].op = 0;
		e[i].val = v[i];
	}
	for (i = 0 ; i < 3; i ++) {
		e[4+i].op = op[i];
		e[4+i].val = 0;
	}
	sort(e, e+7);
	while (next_permutation(e, e+7)) {
		if (e[0].op == 0 && e[1].op == 0 && e[6].op != 0) {
			if (check(e))
				return 1;
		}
	}
	return 0;
}
void solve(const int *v)
{
	int op[3];
	for (op[0] = 1; op[0] <= 3; op[0] ++) {
		for (op[1] = 1; op[1] <= 3; op[1] ++) {
			for (op[2] = 1; op[2] <= 3; op[2] ++) {
				if (solve_op(v, op))
					return;
			}
		}
	}
	puts("0");
}
int main()
{
	int v[4];
	while (scanf("%d%d%d%d", v+0, v+1, v+2, v+3)>0, v[0]||v[1]||v[2]||v[3]) {
		solve(v);
	}
	return 0;
}