#include <iostream>
#include <cstdio>
#include <string>
#include <vector>
#include <stack>
#include <algorithm>

using namespace std;

int calc(const vector<int> &exp) {
    stack<int> st;
    for (int i = 0; i < 7; i++) {
        if (exp[i] == '+') {
            if (st.empty()) return 0;
            int a = st.top(); st.pop();
            if (st.empty()) return 0;
            int b = st.top(); st.pop();
            st.push(a + b);
        } else if (exp[i] == '-') {
            if (st.empty()) return 0;
            int a = st.top(); st.pop();
            if (st.empty()) return 0;
            int b = st.top(); st.pop();
            st.push(b - a);
        } else if (exp[i] == '*') {
            if (st.empty()) return 0;
            int a = st.top(); st.pop();
            if (st.empty()) return 0;
            int b = st.top(); st.pop();
            st.push(a * b);
        } else {
            st.push(exp[i]);
        }
    }
    return st.top();
}

inline bool is_op(char c) {
    return (c == '+' || c == '-' || c == '*');
}

void format(const vector<int> &exp) {
//    for (int i = 0; i < exp.size(); i++) cout << exp[i] << ' ';
//    cout << endl;
    if (is_op(exp[2]) && is_op(exp[5]) && is_op(exp[6])) {
//        cout << "A\n";
        printf("(((%d %c %d) %c (%d %c %d)))\n", 
                exp[0], exp[2], exp[1], exp[6], exp[3], exp[5], exp[4]);
    } else if (is_op(exp[2]) && is_op(exp[4]) && is_op(exp[6])) {
//        cout << "B\n";
        printf("(((%d %c %d) %c %d) %c %d)\n",
                exp[0], exp[2], exp[1], exp[4], exp[3], exp[6], exp[5]);
    } else if (is_op(exp[3]) && is_op(exp[4]) && is_op(exp[6])) {
//        cout << "C\n";
        printf("((%d %c (%d %c %d)) %c %d)\n",
                exp[0], exp[4], exp[1], exp[3], exp[2], exp[6], exp[5]);
    } else if (is_op(exp[3]) && is_op(exp[5]) && is_op(exp[6])) {
//        cout << "D\n";
        printf("(%d %c (%d %c %d) %c %d)\n",
                exp[0], exp[6], exp[1], exp[3], exp[2], exp[5], exp[4]);
    } else if (is_op(exp[4]) && is_op(exp[5]) && is_op(exp[6])) {
//        cout << "E\n";
        printf("(%d %c (%d %c (%d %c %d)))\n",
                exp[0], exp[6], exp[1], exp[5], exp[2], exp[4], exp[3]);
    } else {
        printf("ERROR");
        exit(1);
    }
}

int main() {
    vector<int> n(7);
    while (cin >> n[0] >> n[1] >> n[2] >> n[3]) {
        if (!(n[0] || n[1] || n[2] || n[3])) break;

        string op = "+-*";

        bool found = false;
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++) {
                for (int k = 0; k < 3; k++) {
                    n[4] = op[i], n[5] = op[j], n[6] = op[k];
                    sort(n.begin(), n.end());

                    do {
                        if (calc(n) == 10) {
                            found = true;
                            format(n);
                            goto loop_end;
                        }
                    } while (next_permutation(n.begin(), n.end()));
                }
            }
        }
loop_end:
        if (!found) cout << 0 << endl;
    }
    return 0;
}