#include<cstdio>
#include<algorithm>
#include<vector>
#include<string>
#include<iostream>
#include<queue>
#include<map>
#include<set>
#include<complex>
#include<stack>
#include<cmath>

using namespace std;

#define reps(i,f,n) for(int i=f;i<int(n);i++)
#define rep(i,n) reps(i,0,n)


string ans;
const int N =4;
int in[N];
int visit[N];

char calc[N-1];
int dat[N];

int cp(int a,int b,char c){
	if(c=='+')return a+b;
	if(c=='-')return a-b;
	return a*b;
}

void adans(const char* cp){
	string s = string(cp);
	//cout<<s<<endl;
	ans = s;
}

void solve3(){
	char sp[11111];
	if(cp(cp(cp(dat[0],dat[1],calc[0]),dat[2],calc[1]),dat[3],calc[2])==10 ){
		sprintf(sp,"((%d %c %d) %c %d) %c %d",dat[0],calc[0],dat[1],calc[1],dat[2],calc[2],dat[3]);
		adans(sp);
	}
	if(cp(cp(dat[0],dat[1],calc[0]),cp(dat[2],dat[3],calc[2]),calc[1])==10  ){
		sprintf(sp,"(%d %c %d) %c (%d %c %d)",dat[0],calc[0],dat[1],calc[1],dat[2],calc[2],dat[3]);
		adans(sp);
	}
	if(cp(cp(dat[0],cp(dat[1],dat[2],calc[1]),calc[0]),dat[3],calc[2])==10  ){
		sprintf(sp,"(%d %c (%d %c %d)) %c %d",dat[0],calc[0],dat[1],calc[1],dat[2],calc[2],dat[3]);
		adans(sp);
	}
	if(cp(dat[0],cp(cp(dat[1],dat[2],calc[1]),dat[3],calc[2]),calc[0])==10  ){
		sprintf(sp,"%d %c ((%d %c %d) %c %d)",dat[0],calc[0],dat[1],calc[1],dat[2],calc[2],dat[3]);
		adans(sp);
	}
	if(cp(dat[0],cp(dat[1],cp(dat[2],dat[3],calc[2]),calc[1]),calc[0])==10  ){
		sprintf(sp,"%d %c (%d %c (%d %c %d))",dat[0],calc[0],dat[1],calc[1],dat[2],calc[2],dat[3]);
		adans(sp);
	}
}

void solve2(int depth){
	if(depth==N-1){
		solve3();
		return;
	}
	char cc[3]={'+','-','*'};
	rep(i,3){
		calc[depth]=cc[i];
		solve2(depth+1);
	}
}

void solve(int depth){
	if(depth==N){
		rep(i,N){
			dat[visit[i]]=in[i];
		}
		solve2(0);
		return;
	}
	
	rep(i,N){
		if(visit[i]==-1){
			visit[i]=depth;
			solve(depth+1);
			visit[i]=-1;
		}
	}
}
int main(){
	
	while(1){
		cin>>in[0]>>in[1]>>in[2]>>in[3];
		if(in[0]==0 && in[1]==0 && in[2]==0 && in[3]==0)break;
		
		ans = "0";
		rep(i,N)visit[i]=-1;
		
		solve(0);
		cout<<ans<<endl;
	}
}