#include <iostream>
#include <algorithm>
#include <sstream>
#include <string>
#include <vector>
#include <cmath>
using namespace std;
typedef vector <int> vi;
typedef vector <vi> vvi;
#define REP(i,n) for (int i=0; i<n; i++)
#define ALL(x) x.begin(), x.end()

string i2s(int n)
{
  stringstream ss;
  ss << n;
  return ss.str();
}

vvi permutations(vi x){
	vvi buf;
	int n=x.size(), i=0;
	sort(ALL(x));
	do{
		vi buf0(n);
		REP(i,n)
			buf0[i]=x[i];
		buf.push_back(buf0);
		buf0.clear();
	}while (next_permutation(ALL(x)));
	return buf;
}

vvi products(vi x, int n){
	int n2=x.size(), n3=(int)pow(n2,n);
	vvi buf(n3);
	REP(i,n3){
		vi buf0(n);
		int tmp = i;
		REP(i2,n){
			buf0[i2] = x[tmp%n2];
			tmp /= n2;
		}
		buf[i] = buf0;
	}
	return buf;
}

int op(int x, int y, int mode){
	switch (mode){
	case 0:
		return x+y;
	case 1:
		return x-y;
	case 2:
		return x*y;
	}
}

string check(vi x, int n){
	int x0=x[0], x1=x[1], x2=x[2], x3=x[3];
	string s0=i2s(x0), s1=i2s(x1), s2=i2s(x2), s3=i2s(x3);
	string ops="+-*", eq1, eq2;
	int n1 = ops.size();
	REP(i1, n1){
		int a1 = op(x0, x1, i1);
		eq1 = "("+s0+" "+ops[i1]+" "+s1+")";
		REP(i2, n1){
			int a2 = op(a1, x2, i2);
			eq2 = "("+eq1+" "+ops[i2]+" "+s2+")";
			REP(i3, n1)
				if (op(a2, x3, i3)==n) return "("+eq2+" "+ops[i3]+" "+s3+")";
			a2 = op(x2, x3, i2);
			eq2 = "("+s2+" "+ops[i2]+" "+s3+")";
			REP(i3,n1)
				if (op(a1, a2, i3)==n) return "("+eq1+" "+ops[i3]+" "+eq2+")";
		}
	}
	return "";
}

vi getx(){
	string line;
	getline(cin,line);
	istringstream is(line);
	vi x;
	int tmp;
	bool end = true;
	while(is>>tmp){
		if (tmp!=0) end = false;
		x.push_back(tmp);
	}
	if (end) x.clear();
	return x;
}

int f0041(){
	int n=10;
	while (true){
		vi x = getx();
		if (x.empty()) return 0;

		vvi xx = permutations(x);
		bool f = true;
		REP(i,(int)xx.size()){
			string s = check(xx[i],n);
			if (s != ""){
				cout<<s<<endl;
				f = false;
				break;
			}
		}
		if (f) cout<<"0"<<endl;
	}
}

int main(void){
	f0041();
}