#include <stdio.h>

#define MAXN 1000000

// p[i], q[i], r[i] and s[i] describe the expression with as few '1's as possible which
// corresponds to the value of i. p[i] gives the minimal number of '1's for such expression,
// q[i] and r[i] are left and right operand of s[i] operation that give together
// the value of i. (s[i] == 0 stands for '+', s[i] == 1 for '*', s[i] == 2 for '!' and
// s[i] == 3 for no operator (i.e. 1 = 1, there is no operator.))

char op[4] = {'+', '*', '!', '1'};
int i, p[MAXN+1], q[MAXN+1], r[MAXN+1], s[MAXN+1];

void expression(int n, int pr)
{
	if (s[n] < pr) printf("("); // Put the expression into parentheses if needed.
	if (s[n] < 3) expression(q[n], s[n]);
	printf("%c", op[s[n]]);
	if (s[n] < 2) expression(r[n], s[n]);
	if (s[n] < pr) printf(")");
}

int main(void)
{
	i = 1, p[1] = 1, s[1] = 3;
	int a = 3, fa = 6;  // fa is a factorial of a.

	int n;
	scanf(" %d ", &n);

	while (n > 0)
	{
		while (i < n)
		{
			i++;

			int mina=1, minb=i-1, minc=0, min=p[mina]+p[minb];
			for (int j=2; j<=i/2; j++) if (min > p[j]+p[i-j])
			{
				mina=j, minb=i-j, minc=0, min=p[mina]+p[minb];
			}
			for (int j=2; j<=i/j; j++) if (i%j==0 && min > p[j]+p[i/j])
			{
				mina=j, minb=i/j, minc=1, min=p[mina]+p[minb];
			}
			if (i == fa)
			{
				if (min > p[a]) {mina=a, minc=2, min=p[mina];}
				fa*=++a;
			}

			p[i] = min, q[i] = mina, r[i] = minb, s[i] = minc;
		}

		expression(n, 0);
		printf("\n\n");

		scanf(" %d ", &n);
	}

	return 0;
}
