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
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
#define NDEBUG
#include<bits/stdc++.h>
using namespace std;

#define REP(I,N) for(int I=0;I<(N);I++)
#define FOR(I,A,B) for(int I=(A);I<=(B);I++)
#define FI first
#define SE second

#define LIM 50000
#define LIM2 50

#define DEB 1

template<class T> inline string stringify(const T &x,int p=9){ostringstream o;o.precision(p);o<<x;o.flush();return o.str();}

unordered_map<int,string> m;
unordered_map<int,int> m2;

inline void gen(int n){
  int mode=0,mode2=0;
  string s;
  s.reserve(300);
  int d=(int)sqrt(n);
  int r=n-d*d;
  int r2=r;
  int q1=m2[d]<<1;
  if(r){
    q1+=m2[r];
  }
  int q2;
  if((d+1)*d<=n){
    r=n-(d+1)*d;
    q2=m2[d]+m2[d+1];
    if(r){
      q2+=m2[r];
    }
    if(q2<q1){
      q1=q2;
      mode=1;
      r2=r;
    }
  }

  FOR(i,1,LIM2){
    int dx=d-i;
    if(dx<=1) break;
    int dx2=n/dx;
    r=n-dx*dx2;
    q2=m2[dx]+m2[dx2];
    if(r){
      q2+=m2[r];
    }
    if(q2<q1){
      q1=q2;
      mode=7;
      mode2=i;
      r2=r;
    }
  }
  
  if(mode==0){
    s="("+m[d]+"*"+m[d];
    if(r2){
      s+="+"+m[r2];
    }
    s+=")";
  }else if(mode==1){
    s="("+m[d]+"*"+m[d+1];
    if(r2){
      s+="+"+m[r2];
    }
    s+=")";
  }else if(mode==7){
    s="("+m[d-mode2]+"*"+m[n/(d-mode2)];
    if(r2){
      s+="+"+m[r2];
    }
    s+=")";
  }
  
  m[n]=s;
  m2[n]=q1;
}

inline string get(int n){
  auto it=m.find(n);
  if(it!=m.end()) return m[n];
  gen(n);
  return m[n];
}

int main(){
  m.reserve(LIM+10+100);
  m2.reserve(LIM+10+100);
  m[1]="1"; m2[1]=1;
  m[2]="(1+1)"; m2[2]=2;
  m[3]="(1+1+1)"; m2[3]=3;
  m[4]="(1+1+1+1)"; m2[4]=4;
  m[5]="(1+1+1+1+1)"; m2[5]=5;
  m[6]="((1+1)*(1+1+1))"; m2[6]=5;
  m[7]="((1+1)*(1+1+1)+1)"; m2[7]=6;
  m[8]="((1+1)*(1+1+1)+1+1)"; m2[8]=7;
  m[9]="((1+1+1)*(1+1+1))"; m2[9]=6;
  m[10]="((1+1)*(1+1+1+1+1))"; m2[10]=7;
  FOR(i,11,LIM){
    gen(i);
  }
  
  int TT,x;
  cin>>TT;
  REP(i,TT){
    cin>>x;
    cout<<get(x)<<"\n";
  }
  return 0;
}