#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <queue>
#include <climits>
#include <map>
#include <stack>
using namespace std;
#define M_PI 3.141592
#define toRad 2.0*M_PI/360.0
#define inin(x) int x;cin>>x;
#define all(x) x.begin(),x.end()
#define debug(x) cout<<#x<<" "<<x<<endl;

#define a n[0]
#define b n[1]
#define c n[2]
#define d n[3]

int calc(int x, int y, int op)
{
	switch (op)
	{
	case '+':return x + y;
	case '-':return x - y;
	case '*':return x * y;
	}
}

int main()
{
	vector<int> n(4);
	string op = "+++---***";
	while (cin >> a >> b >> c >> d && a || b || c || d)
	{
		bool flag = true;
		sort(all(n));
		do
		{
			sort(all(op));
			do
			{
				if (calc(calc(calc(a, b, op[0]), c, op[1]), d, op[2]) == 10)
				{
					printf("(((%d%c%d)%c%d)%c%d)\n", a, op[0], b, op[1], c, op[2], d);
					flag = false;
					break;
				}

				if (calc(calc(a, b, op[0]), calc(c, d, op[2]), op[1]) == 10)
				{
					printf("((%d%c%d)%c(%d%c%d))\n", a, op[0], b, op[1], c, op[2], d);
					flag = false;
					break;
				}

				if (calc(calc(a, calc(b, c, op[1]), op[0]), d, op[2]) == 10)
				{
					printf("(((%d%c(%d%c%d))%c%d)\n", a, op[0], b, op[1], c, op[2], d);
					flag = false;
					break;
				}

				if (calc(a, calc(calc(b, c, op[1]), d, op[2]), op[0]) == 10)
				{
					printf("(%d%c((%d%c%d)%c%d))\n", a, op[0], b, op[1], c, op[2], d);
					flag = false;
					break;
				}

				if (calc(a, calc(b, calc(c, d, op[2]), op[1]), op[0]) == 10)
				{
					printf("(%d%c(%d%c(%d%c%d)))\n", a, op[0], b, op[1], c, op[2], d);
					flag = false;
					break;
				}

			} while (next_permutation(all(op)));

		} while (next_permutation(all(n)) && flag);
		if (flag)
		{
			cout << 0 << endl;
		}
	}
}