#include<algorithm>
#include<iostream>
#include<vector>
#include<numeric>
#include<string>
#include<stdio.h>
#include<string.h>
#include<ctype.h>

std::vector<int> v;
std::string s;
std::string::iterator it;
char ope[4] = { '+', '-', '*' };

int term();
int num();

int Expr()
{	
	int p = term();
	
	while( *it == '+' || *it == '-' ){
		if( *it == '+' ){
		 	it++;
			int q = term();
			p += q;
		}
		else{
			it++;
			int q = term();
			p -= q;
		}
	}
	
	return p;
}

int term()
{
	int p = num();
	
	while( *it == '*' || *it == '/' ){
	 	if( *it == '*' ){
		 	it++;
			int q = num();
			p *= q;
		}
		else{
			it++;
			int q = num();
			p /= q;
			if( p % q ) p++;
		}
	}
	
	return p;
}

int num()
{
 	if( *it == '(' ){
		it++;
		int p = Expr();
		it++;
		return p;
	}
	else{
		int p = 0;
	 	while( isdigit( *it ) ){
			p *= 10;
			p += *it - '0';
			it++;
		}
		
		return p;
	}
}

bool f()
{
	s.clear();
	
	char expr[256];
	
	for( int i = 0; i < 3; i++ ){
		for( int j = 0; j < 3; j++ ){
			for( int k = 0; k < 3; k++ ){
				// type 1
				sprintf( expr, "((%d%c%d)%c%d)%c%d", v[0], ope[i], v[1], ope[j], v[2], ope[k], v[3] );
				s = expr;
				it = s.begin();
				if( Expr() == 10 ) return true;
				// type 2
				sprintf( expr, "(%d%c(%d%c%d))%c%d", v[0], ope[i], v[1], ope[j], v[2], ope[k], v[3] );
				s = expr;
				it = s.begin();
				if( Expr() == 10 ) return true;
				// type 3
				sprintf( expr, "%d%c((%d%c%d)%c%d)", v[0], ope[i], v[1], ope[j], v[2], ope[k], v[3] );
				s = expr;
				it = s.begin();
				if( Expr() == 10 ) return true;
				// type 4
				sprintf( expr, "%d%c(%d%c(%d%c%d))", v[0], ope[i], v[1], ope[j], v[2], ope[k], v[3] );
				s = expr;
				it = s.begin();
				if( Expr() == 10 ) return true;
				// type 5
				sprintf( expr, "((%d%c%d)%c(%d%c%d))", v[0], ope[i], v[1], ope[j], v[2], ope[k], v[3] );
				s = expr;
				it = s.begin();
				if( Expr() == 10 ) return true;
			}
		}
	}
	
	return false;
}

int main()
{
	while( 1 ){
		v.clear();
		int a, b, c, d;
	 	std::cin >> a >> b >> c >> d;
		if( !a && !b && !c && !d ) break;
		
		v.push_back( a );
		v.push_back( b );
		v.push_back( c );
		v.push_back( d );
		
		std::sort( v.begin(), v.end(), std::greater<int>() );
		
		bool suc = false;
		do{
			if( f() ){
				std::cout << s << std::endl;
				suc = true;
				break;
			}
		}while( std::prev_permutation( v.begin(), v.end() ) );
		
		if( !suc ){
			std::cout << 0 << std::endl;
		}
	}
	std::cout << Expr();

 	return 0;
}