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
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>


int pos;
char buff[1024];

char *nums[] = {
        "",
        "1",
        "(1+1)",
        "(1+1+1)",
        "(1+1+1+1)",
        "(1+1+1+1+1)",
        "(1+1)*(1+1+1)",
        "((1+1)*(1+1+1)+1)",
        "(1+1)*(1+1)*(1+1)"
};

void mwrite(char *s) {
        strncpy(buff+pos, s, 1000-pos);
        pos += strlen(s);
}

int countones() {
        int c = 0;
        char *s = buff;
        while (*s) {
                if (*s == '1') c++;
                s++;
        }
        return c;
}

void ones(int k) {
        int p,r;
        if (k<=8) {
                mwrite(nums[k]);
                return;
        }
        p = sqrt(k);
        r = k-p*p;
        if (r) {
                mwrite("(");
                ones(r);
                mwrite("+");
        }
        ones(p);
        mwrite("*");
        ones(p);
        if (r) mwrite(")");
}

int main() {

        int t,k;
        scanf("%d\n", &t);
        while (t--) {
                scanf("%d\n", &k);
                pos = 0;
                ones(k);
                if (countones() > 100) {
                        printf("NIE\n");
                } else {
                        printf("%s\n", buff);
                }
        }
        return 0;
}