program Exprressions;

var
  TokenChar: array [1..250] of Char;
  TokenLeft: array [1..250] of Integer;
  TokenRight: array [1..250] of Integer;
  NumTokens: Integer;
  S: string [250];
  
procedure Print(I: Integer;
                Parent: Char;
		Left: Boolean);

var
  NeedBrace: Boolean;
  
begin
  Readln;
  if TokenChar[I] in ['a'..'z'] then
    Write(TokenChar[I])
  else
  begin
    NeedBrace := (Parent in ['/', '(']) and (TokenChar[I] in ['+', '-']);
    if not Left then
      NeedBrace := NeedBrace or (Parent in ['/', '-']);
    if NeedBrace then
      Write('(');
    Print(TokenLeft[I], TokenChar[I], True);
    Write(TokenChar[I]);
    Print(TokenRight[I], TokenChar[I], False);
    if NeedBrace then
      Write(')');      
  end;  
end;

function Parse(L: Integer;
               R: Integer;
	       Op: Char;
	       OpToken: Integer): Integer;
	       
var
  B: Integer;
  I: Integer;
  T1: Integer;
  T2: Integer;
  
begin
  B := 0;
  I := L;
  repeat
    if S[I] = '(' then
      Inc(B)
    else if S[I] = ')' then
      Dec(B);
    Inc(I);
  until B = 0;
  if I <= R then
  begin
    T1 := Parse(L, I - 1, ' ', 0);
    if (S[I] = '+') or (S[I] = '-') then
    begin
      T2 := Parse(I + 1, R, ' ', 0);
      if OpToken > 0 then
      begin
        Inc(NumTokens);
	TokenChar[NumTokens] := Op;
	TokenLeft[NumTokens] := OpToken;
	TokenRight[NumTokens] := T1;
	T1 := NumTokens;
      end;      
      Inc(NumTokens);
      TokenChar[NumTokens] := S[I];
      TokenLeft[NumTokens] := T1;
      TokenRight[NumTokens] := T2;
      Parse := NumTokens;
    end
    else
    begin
      if OpToken > 0 then
      begin
        Inc(NumTokens);
	TokenChar[NumTokens] := Op;
	TokenLeft[NumTokens] := OpToken;
	TokenRight[NumTokens] := T1;
	T1 := NumTokens;
      end;
      Parse := Parse(I + 1, R, S[I], T1);
    end;
  end
  else if L < R then
    Parse := Parse(L + 1, R - 1, Op, OpToken)
  else
  begin
    Inc(NumTokens);
    TokenChar[NumTokens] := S[L];
    if OpToken > 0 then
    begin
      Inc(NumTokens);    
      TokenChar[NumTokens] := Op;
      TokenLeft[NumTokens] := OpToken;
      TokenRight[NumTokens] := NumTokens - 1;
    end;
    Parse := NumTokens;
  end;
end;

var
  I: Integer;
  T: Integer;
  
begin
  Readln(T);
  while T <> 0 do
  begin
    Dec(T);
    Readln(S);
    NumTokens := 0;
    I := Parse(1, Length(S), ' ', 0);    
    Print(I, '+', True);
  end;
end.