program A(input,output);

type TStr = string [505];

var
    vstup : string [1020];
    x, sirka, sirka1 : integer;
    c1, c2, vy : TStr;
    
    radky : array [0..550] of TStr;


procedure Secti(var a1,a2 : string; var v:string);
  var pridej : TStr;
      a, rd, s, prenos : integer; 
  begin
    if length(a1)>length(a2) then begin
      v:=a1;
      pridej:=a2;    
    end else begin
      v:=a2;
      pridej:=a1;
    end;
    
    prenos:=0;
    
    rd:=Length(v)-Length(pridej);
    for a:=Length(pridej) downto 1 do begin
      s:=Ord(v[rd+a])+Ord(pridej[a])-2*Ord('0')+prenos;
      prenos:=s div 10;
      v[rd+a]:=Char((s mod 10)+Ord('0'));
    end;
    
    while prenos>0 do begin
      if rd=0 then begin
        v:='0'+v;
	rd:=1;
      end;	
      s:=ord(v[rd])-Ord('0')+prenos;
      prenos:=s div 10;
      v[rd]:=Char(s mod 10 + Ord('0'));
      dec(rd);
    end;
  end;


procedure Vystup(zn: integer;var c:string);
  var i : integer;
  begin
{   Write(zn);}
    for i:=1 to sirka-Length(c)-zn do Write(' ');
    if zn=1 then Write(vstup[x]);
    WriteLn(c);
  end;


procedure VystupRad(zn: integer;var c:string);
  var i : integer;
  begin
{   Write(zn);}
    for i:=1 to sirka-Length(c)-zn do Write(' ');
    WriteLn(c);
  end;


procedure Vynasob(rad: integer; c: char;var c1 : string; var v:string);
  var a,s, prenos : integer;
      n : integer;
      ns : string[20];
      pc,pc1 : TStr;
  begin
    pc:=c1;
    n:=Ord(c)-Ord('0');
    if n<>0 then begin
      prenos:=0;
      for a:=Length(c1) downto 1 do begin
        s:=n*(c1[a]-Ord('0'))+prenos;
        prenos:=s div 10;
        pc[a]:=Char((s mod 10) + Ord('0'));    
      end;
      if prenos>0 then begin
        Str(prenos,ns);
        pc:=ns+pc;
      end;
    end else pc:='0';  
{    VystupRad(rad,pc);}
    Radky[rad]:=pc;
    for a:=1 to rad do pc:=pc+'0';

    pc1:=v;    
    Secti(pc,pc1,v);
  end;

procedure Odecti(var a1,a2 : string; var v: string);
  var a, rd : integer;
      s, prenos : integer;
  begin
    v:=a1;
    rd:=Length(a1)-Length(a2);
    prenos:=0;
    for a:=Length(a2) downto 1 do begin
      s:=Ord(v[rd+a])-Ord(a2[a])-prenos;
      if s<0 then begin
        s:=s+10;
	prenos:=1;
      end else begin
        prenos:=0;
      end;
      v[rd+a]:=Char((s)+Ord('0'));    
    end;
    while prenos>0 do begin
      s:=Ord(v[rd])-Ord('0')-prenos;
      if s<0 then begin
        s:=s+10;
	prenos:=1;
      end else begin
        prenos:=0;
      end;
      v[rd]:=Char((s)+Ord('0'));    
      Dec(rd);    
    end;
    prenos:=1;
    while ((v[prenos]='0') and (prenos<Length(v))) do Inc(prenos);
    v:=Copy(v,prenos,Length(v));
  end;


  
procedure Pomlcky;
  var i: integer;
  begin
    for i:=1 to sirka do write('-');
    WriteLn;    
  end;

procedure Pomlcky1;
  var i: integer;
  begin
    for i:=1 to sirka-sirka1 do write(' ');
    for i:=1 to sirka1 do write('-');
    WriteLn;    
  end;

procedure Rozdel;
  begin
    c1:=Copy(vstup,1,x-1);
    c2:=Copy(vstup,x+1,Length(vstup));  
    sirka:=Length(c1);
    if Length(c2)>=sirka then sirka:=length(c2)+1;    
{    if Vstup[x]='*' then begin
      sirka1 := sirka;
      sirka:=Length(c1)+length(c2);
    end;}
  end;
  
procedure Sci;
  begin
    Rozdel;
    Secti(c1,c2,vy);
    if sirka<length(vy) then sirka:=Length(vy);
    Vystup(0,c1);
    Vystup(1,c2);    
    Pomlcky;  
    Vystup(0,vy);    
    WriteLn;
  end;
  
procedure Roz;
  begin
    Rozdel;
    Odecti(c1,c2,vy);    
    Vystup(0,c1);
    Vystup(1,c2);    
    Pomlcky;  
    Vystup(0,vy);    
    WriteLn;
  end;

procedure Sou;
  var a: integer;
  begin
    Rozdel;

        
    vy:='0';
    
    for a:=Length(c2) downto 1 do
      Vynasob(Length(c2)-a,c2[a],c1,vy);
    
    sirka1:=sirka;  
    if length(vy)>sirka then begin
      sirka:=Length(vy);
    end;  
      
    Vystup(0,c1); 
    Vystup(1,c2);    
    Pomlcky1;

    for a:=0 to Length(c2)-1 do
      VystupRad(a,Radky[a]);

    Pomlcky;  
    Vystup(0,vy);    
    WriteLn;
  end;

var z,PocZadani : integer;
begin
  readLn(PocZadani);
  
  for z:=1 to PocZadani do begin
    readLn(vstup);
    x:=Pos('+',vstup);
    if x>0 then begin
      Sci;
    end else begin
      x:=Pos('-',vstup);
      if x>0 then begin
        Roz;   
      end else begin
        x:=Pos('*',vstup);
	if x>0 then begin
	  Sou;
	end;
      end;
    end;
    
    
  end;
end.
