#include char *buf[200]; char *pos; struct Expr { char typ; char var; Expr *var1; char op; Expr *var2; }; Expr *getVar(); Expr *getExpr() { Expr *e,*var1,*var2; var1=getVar(); char c = *pos; if (c==0 || c==')') return var1; e=new Expr; e->typ=1; e->var1=var1; e->op=c; pos++; e->var2=getVar(); if (*pos=='+' || *pos=='-' || *pos=='*' || *pos=='/') { Expr *e2 = new Expr; e2->typ=1; e2->var1=e; e2->op=*pos++; e2->var2=getExpr(); e=e2; } return e; }; Expr *getVar() { Expr *e; char c=*pos++; if (c=='(') { e = getExpr(); pos++; return e;} e = new Expr; e->typ=0; e->var=c; return e; }; void dele(Expr *e) { if (e->typ==0) { delete e; return; } dele(e->var1); dele(e->var2); delete e; } void WriteExpr(Expr *e,char op,char side) { char naw = 0; if (e->typ==0) { printf("%c",e->var); return; } switch(op) { case '*': if (e->op=='+' | e->op=='-') naw=1; break; case '-': if (side==1 && (e->op=='-' || e->op=='+')) naw=1; break; case '/': if (side==0 && (e->op=='-' || e->op=='+')) naw=1; if (side==1) naw=1; break; } if (naw) printf("("); WriteExpr(e->var1,e->op,0); printf("%c",e->op); WriteExpr(e->var2,e->op,1); if (naw) printf(")"); }; int main() { int i,T; char buf[200]; scanf("%d",&T); for(i=0;ityp==0) printf("%c",e->var); else { WriteExpr(e->var1,e->op,0); printf("%c",e->op); WriteExpr(e->var2,e->op,1); } printf("\n"); dele(e); } return 0; }