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
71
72
73
74
75
#include <iostream>
#include <math.h>
#include <string>

using namespace std;

int podziel(int liczba, double &ileRazy) {
	ileRazy = 0;
	int potega = liczba;

	while (potega >= ileRazy) {
		ileRazy++;
		potega = floor(pow(liczba, 1 / ileRazy));
	}

	return potega;
}

string przeliczNaJedynki(int potega, int stopien, int &liczbaJedynek) {
	string tmp = "";

	for (int j = 1; j <= stopien; j++) {
		tmp += "(1";
		liczbaJedynek++;
		for (int i = 1; i < potega; i++) {
			tmp += "+1";
			liczbaJedynek++;
		}
		tmp += ")";

		if (stopien != j)
			tmp += "*";
	}

	return tmp;
}

void przypadek() {
	int wejscie;
	string wyjscie = "";
	cin >> wejscie;

	int potega;
	int liczbaJedynek = 0;
	double ileRazy;
	while (wejscie > 0) {
		potega = podziel(wejscie, ileRazy);
		wejscie -= pow(potega,ileRazy);

		if (ileRazy != 1 && potega != 1) {
			wyjscie += przeliczNaJedynki(potega, ileRazy, liczbaJedynek);
		} else {
			wyjscie += "1";
			liczbaJedynek++;
		}

		if (wejscie > 0)
			wyjscie += "+";
	}

	if (liczbaJedynek <= 100)
		cout << wyjscie << endl;
	else
		cout << "NIE" << endl;
}

int main() {
	int t;
	cin >> t;

	while (t-- > 0)
		przypadek();

    return 0;
}