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

#define f first
#define s second

#define REP(i,n) for(int i=0; i<(int)(n); i++)
#define FOR(i,c) for(__typeof((c).begin()) i=(c).begin(); i!=(c).end(); i++)
#define ALL(c) (c).begin(), (c).end()
#define EPS (1e-10)
using namespace std;

typedef unsigned int uint;
typedef long long ll;
typedef complex<double> P;

enum OP{
  integer=0,
  add=1,
  sub=2,
  mul=3
};

const char *op2str = " +-*";

struct node{
  int op;
  int val;
  node *l;
  node *r;
  node(int v) : val(v), op(integer) {}
  node(int o, node *lt, node *rt) : op(o), l(lt), r(rt) {}
  int value(){
    if(op == integer) return val;
    int a = l->value();
    int b = r->value();
    if(op == add) return a+b;
    if(op == sub) return a-b;
    if(op == mul) return a*b;
  }
  void print(){
    if(op == integer){
      printf("%d",val);
      return;
    }
    printf("(");
    l->print();
    printf(" %c ",op2str[op]);
    r->print();
    printf(")");
  }
};

bool search(node *nd[], int n){
  if(n == 1){
    int val = nd[0]->value();
    //printf("%d : ",val); nd[0]->print(); puts("");
    if(val == 10){
      nd[0]->print();
      puts("");
      return true;
    }else{
      return false;
    }
  }else{
    int p[n];
    REP(i,n) p[i] = 0;
    p[n-1] = p[n-2] = 1;
    do{
      node *nd2[n-1];
      node *chs[2];
      int cnt1 = 0, cnt2 = 0;
      REP(i,n){
	if(p[i] == 0){
	  nd2[cnt1++] = nd[i];
	}else{
	  chs[cnt2++] = nd[i];
	}
      }
      REP(i,3){
	{
	  node nw(i+1,chs[0],chs[1]);
	  nd2[cnt1] = &nw;
	  if(search(nd2, n-1)) return true;
	}
	if(i == 1){
	  node nw(i+1,chs[1],chs[0]);
	  nd2[cnt1] = &nw;
	  if(search(nd2, n-1)) return true;
	}
      }
    }while(next_permutation(p, p+n));
  }
  return false;
}

int main(){
  int a,b,c,d;
  while(scanf("%d%d%d%d",&a,&b,&c,&d),a+b+c+d){
    node nd[4] = {node(a), node(b), node(c), node(d)};
    node *t[4] = {&nd[0], &nd[1], &nd[2], &nd[3]};
    if(!search(t,4)) puts("0");
  }
  return 0;
}