1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include<bits/stdc++.h>

using namespace std;

vector<int>JakieMnozenie;

char Wynik[2000];

void RozlozLiczbe(int liczba, int &koniec){
	while(liczba>2){
		JakieMnozenie.push_back(liczba%2);
		liczba/=2;
	}
	if(liczba==1){
		koniec=111;
		Wynik[110]='1';
		return;
	}
	Wynik[110]='(';
	Wynik[111]='1';
	Wynik[112]='+';
	Wynik[113]='1';
	Wynik[114]=')';
	koniec=115;
}

void ZlozLiczbe(int &pocz, int &koniec){
	int i;
	pocz=109;
	i=JakieMnozenie.size()-1;
	while(!JakieMnozenie.empty() ){
		Wynik[koniec]='*';
		Wynik[koniec+1]='(';
		Wynik[koniec+2]='1';
		Wynik[koniec+3]='+';
		Wynik[koniec+4]='1';
		Wynik[koniec+5]=')';
		Wynik[pocz]='(';
		pocz--;
		koniec+=6;
		if(JakieMnozenie[i]==1){
			Wynik[koniec]='+';
			Wynik[koniec+1]='1';
			koniec+=2;
		}
		Wynik[koniec]=')';
		koniec++;
		JakieMnozenie.pop_back();
		i--;
	}
	for(i=pocz+2; i<koniec-1; i++){
		printf("%c", Wynik[i]);
	}
	printf("\n");
}

int main (){
	int n, i, pocz, koniec, t;
	scanf("%d", &t);
	for(i=1; i<=t; i++){
		scanf("%d", &n);
		if(n==1){
			printf("1\n");
			continue;
		}
		RozlozLiczbe(n, koniec);
		ZlozLiczbe(pocz, koniec);
	}
	return 0;
}