#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<cctype>
#include<math.h>
#include<string>
#include<string.h>
#include<stack>
#include<queue>
#include<vector>
#include<utility>
#include<set>
#include<map>
#include<stdlib.h>
#include<iomanip>

using namespace std;

#define ll long long
#define ld long double
#define EPS 0.0000000001
#define INF 1e9
#define LINF (ll)INF*INF
#define MOD 1000000007
#define rep(i,n) for(int i=0;i<(n);i++)
#define loop(i,a,n) for(int i=a;i<(n);i++)
#define all(in) in.begin(),in.end()
#define shosu(x) fixed<<setprecision(x)

//#define int ll //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

typedef vector<int> vi;
typedef vector<string> vs;
typedef pair<int,int> pii;
typedef vector<pii> vp;

int gcd(int a, int b){
    if(b==0) return a;
    return gcd(b,a%b);
}
int lcm(int a, int b){
    return a/gcd(a,b)*b;
}

int g(int a, int b, int op){
    if(op == 0)return a + b;
    if(op == 1)return a - b;
    if(op == 2)return a * b;
    return 0;
}

bool f(vi d){
    string s = "+-*";
    rep(i,3)rep(j,3)rep(k,3){
        if(g(g(g(d[0],d[1],i),d[2],j),d[3],k) == 10){
            printf("(((%d %c %d) %c %d) %c %d)\n", d[0], s[i], d[1], s[j], d[2], s[k], d[3]);
            return true;
        }
        if(g(g(d[0],d[1],i),g(d[2],d[3],k), j) == 10){
            printf("((%d %c %d) %c (%d %c %d))\n", d[0], s[i], d[1], s[j], d[2], s[k], d[3]);
            return true;
        }
        if(g(g(d[0],g(d[1],d[2],j),i),d[3],k) == 10){
            printf("((%d %c (%d %c %d)) %c %d)\n", d[0], s[i], d[1], s[j], d[2], s[k], d[3]);
            return true;
        }
    }
    return false;
}

signed main(void) {
    vi v(4);
    while(1){
        rep(i,4)cin >> v[i];
        sort(all(v));
        if(v.back() == 0)break;
        bool ans = true;
        do{
            if(f(v)){
                ans = false;
                break;
            }
        }while(next_permutation(all(v)));
        if(ans)cout << 0 << endl;
    }
}

