/*#include<stdio.h>
int swap(int *a,int *b)
{
int temp=*a;
*a=*b;
*b=temp;
return 0;
}
int B2D(int n,int *A)
{
int i=0,j;
while(n!=0)
{
A[i++]=n%2;
n/=2;
}
n=i;
for(i=0,j=n-1;i!=j;i++,j--)swap(&A[i],&A[j]);
return n;
}
int main()
{
int A[20];
int i,n=B2D(127,A);
for(i=0;i<n;i++)printf("%d",A[i]);
}*/
#include<stdio.h>
#include<string.h>
/*static int tag=0;
int B2D(int n,int *A)
{
int i=0,j;
while(n!=0)
{
A[i++]=n%2;
n/=2;
}
n=i;
return n;
}
int f(int* A,int pos,int n)
{if(pos>=n)return 0;
if(tag++>0)printf("+");
if(pos==0){printf("0");return 0;}
if(pos==1){printf("2");return 0;}
else printf("2(");
int B[20],m=B2D(pos,B);
f(B,0,m);
f(A,pos+1,n);
printf(")");
//for(i=0,j=n-1;i!=j;i++,j--)swap(&A[i],&A[j]);
return n;
}*/
static int tag = 0;
static char str[500];
void f(int n) {
if (n == 0) {
strcat(str, "2(0)");
return;
}
if (n == 1) {
strcat(str, "2");
return;
}
int i = 0, j, A[20];
while (n != 0) {
A[i++] = n % 2;
n /= 2;
}
if (i == 0)return;
for (j = i - 1; j >= 0; j--) {
if (A[j] == 1 && j >= 2)strcat(str, "2(");
if (A[j] == 1)f(j);
if (A[j] == 1 && j >= 2)strcat(str, ")");
}
}
int main() {
int num;
scanf("%d",&num);
f(num);
int i, n = strlen(str);
for (i = 0; i < n - 1; i++) {
printf("%c", str[i]);
if (str[i] == '2' && str[i + 1] == '2')printf("+");
if (str[i] == ')' && str[i + 1] == '2')printf("+");
}
printf("%c", str[i]);
}