program Expr; type PExpr = ^TExpr; TExpr = record op: Char; l, r: PExpr; end; var s: string; pos: Integer; c: Char; expr: PExpr; procedure Test; begin Inc(pos); c := s[pos]; end; function Wyr: PExpr; forward; function Czynnik: PExpr; var r: PExpr; begin if c = '(' then begin Test; Czynnik := Wyr; Test; end else begin New(r); r^.op := c; Test; Czynnik := r; end; end; function Skladnik: PExpr; var r, p: PExpr; begin r := Czynnik; while c in ['*', '/'] do begin New(p); p^.l := r; p^.op := c; Test; p^.r := Czynnik; r := p; end; Skladnik := r; end; function Wyr: PExpr; var r, p: PExpr; begin r := Skladnik; while c in ['+', '-'] do begin New(p); p^.l := r; p^.op := c; Test; p^.r := Skladnik; r := p; end; Wyr := r; end; procedure Wypisz(var e: TExpr; prior: Integer); var rp, left, right: Integer; begin if e.op in ['a'..'z'] then begin Write(e.op); Exit; end; rp := 0; if e.op in ['*', '/'] then rp := 1; if prior > rp then Write('('); left := 0; right := 0; if e.op = '-' then right := 1; if e.op = '*' then begin left := 1; right := 1; end; if e.op = '/' then begin left := 1; right := 2; end; Wypisz(e.l^, left); Write(e.op); Wypisz(e.r^, right); if prior > rp then Write(')'); end; var t: Integer; begin Readln(t); while t > 0 do begin Readln(s); s := s + ';'; pos := 0; Test; expr := Wyr; Wypisz(expr^, 0); Writeln; Dec(t); end; end.{ begin end.}