#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <map>
#include <set>
#include <queue>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <sstream>
#include <vector>
#include <string>
#include <iomanip>
#include <bitset>
#define INF	100000000
#define pb	push_back
#define fi first
#define sec second
#define SS stringstream
using namespace std;
typedef pair<int, int> P;
typedef long long int	ll;

int a, b, c, d;
int p[4];

int main(){
	while(scanf("%d%d%d%d", &a, &b, &c, &d)){
		if(a == 0 && b == 0 && c == 0 && d == 0) break;
		bool flag = false;
		p[0] = a;
		p[1] = b;
		p[2] = c;
		p[3] = d;
		sort(p, p+4);
		do{
			if(p[0]+p[1]+p[2]+p[3] == 10){ printf("(%d+%d+%d+%d)\n",p[0],p[1],p[2],p[3]); flag = true; break;}
			if(p[0]+p[1]+p[2]-p[3] == 10){ printf("(%d+%d+%d-%d)\n",p[0],p[1],p[2],p[3]); flag = true; break;}
			if(p[0]+p[1]-p[2]-p[3] == 10){ printf("(%d+%d-%d-%d)\n",p[0],p[1],p[2],p[3]); flag = true; break;}
			if(p[0]+p[1]-p[2]*p[3] == 10){ printf("(%d+%d-%d*%d)\n",p[0],p[1],p[2],p[3]); flag = true; break;}
			if(p[0]*p[1]*p[2]*p[3] == 10){ printf("(%d*%d*%d*%d)\n",p[0],p[1],p[2],p[3]); flag = true; break;}
			if(p[0]*p[1]+p[2]+p[3] == 10){ printf("(%d*%d+%d+%d)\n",p[0],p[1],p[2],p[3]); flag = true; break;}
			if(p[0]*p[1]+p[2]-p[3] == 10){ printf("(%d*%d+%d-%d)\n",p[0],p[1],p[2],p[3]); flag = true; break;}
			if(p[0]*p[1]-p[2]-p[3] == 10){ printf("(%d*%d-%d-%d)\n",p[0],p[1],p[2],p[3]); flag = true; break;}
			if(p[0]*p[1]+p[2]*p[3] == 10){ printf("(%d*%d+%d*%d)\n",p[0],p[1],p[2],p[3]); flag = true; break;}
			if(p[0]*p[1]-p[2]*p[3] == 10){ printf("(%d*%d-%d*%d)\n",p[0],p[1],p[2],p[3]); flag = true; break;}
			if(p[0]*p[1]*p[2]+p[3] == 10){ printf("(%d*%d*%d+%d)\n",p[0],p[1],p[2],p[3]); flag = true; break;}
			if(p[0]*p[1]*p[2]-p[3] == 10){ printf("(%d*%d*%d-%d)\n",p[0],p[1],p[2],p[3]); flag = true; break;}
			if((p[0]+p[1])*p[2]+p[3] == 10){ printf("((%d+%d)*%d+%d)\n",p[0],p[1],p[2],p[3]); flag = true; break;}
			if((p[0]+p[1])*p[2]-p[3] == 10){ printf("((%d+%d)*%d-%d)\n",p[0],p[1],p[2],p[3]); flag = true; break;}
			if((p[0]+p[1])*p[2]*p[3] == 10){ printf("((%d+%d)*%d*%d)\n",p[0],p[1],p[2],p[3]); flag = true; break;}
			if((p[0]-p[1])*p[2]+p[3] == 10){ printf("((%d-%d)*%d+%d)\n",p[0],p[1],p[2],p[3]); flag = true; break;}
			if((p[0]-p[1])*p[2]-p[3] == 10){ printf("((%d-%d)*%d-%d)\n",p[0],p[1],p[2],p[3]); flag = true; break;}
			if((p[0]-p[1])*p[2]*p[3] == 10){ printf("((%d-%d)*%d*%d)\n",p[0],p[1],p[2],p[3]); flag = true; break;}
			if((p[0]+p[1])*(p[2]+p[3]) == 10){ printf("((%d+%d)*(%d+%d))\n",p[0],p[1],p[2],p[3]); flag = true; break;}
			if((p[0]+p[1])*(p[2]-p[3]) == 10){ printf("((%d+%d)*(%d-%d))\n",p[0],p[1],p[2],p[3]); flag = true; break;}
			if((p[0]-p[1])*(p[2]-p[3]) == 10){ printf("((%d-%d)*(%d-%d))\n",p[0],p[1],p[2],p[3]); flag = true; break;}
			if((p[0]+p[1]+p[2])*p[3] == 10){ printf("((%d+%d+%d)*%d)\n",p[0],p[1],p[2],p[3]); flag = true; break;}
			if((p[0]+p[1]-p[2])*p[3] == 10){ printf("((%d+%d-%d)*%d)\n",p[0],p[1],p[2],p[3]); flag = true; break;}
			if((p[0]-p[1]-p[2])*p[3] == 10){ printf("((%d-%d-%d)*%d)\n",p[0],p[1],p[2],p[3]); flag = true; break;}
			if((p[0]*p[1]+p[2])*p[3] == 10){ printf("((%d*%d+%d)*%d)\n",p[0],p[1],p[2],p[3]); flag = true; break;}
			if((p[0]*p[1]-p[2])*p[3] == 10){ printf("((%d*%d-%d)*%d)\n",p[0],p[1],p[2],p[3]); flag = true; break;}
		} while(next_permutation(p, p + 4));
		if(flag == true) continue;
		cout << "0" << endl;
	}
}

Measured memory_bytes: 1248