program arith;
const
  maxl=300;
  maxp=1000000;
type
  tlong=array[0..maxl] of integer;
var
  pp:array[0..6] of integer;
  a,b:tlong;
  r:array[1..600] of tlong;
  t:integer;
  op:char;
  ch:char;
  
  procedure init;
  var
    i:integer;
  begin
    pp[0]:=1;
    for i:=1 to 6 do pp[i]:=pp[i-1]*10;    
  end;
  
  procedure read_long(var l:tlong);
  var
    i:integer;
    ii:integer;
    p:integer;
    j:integer;
    k:integer;
    tab:array[1..1000] of integer;
  begin
    i:=0;
    while (ch in ['0'..'9']) do begin
      inc(i);
      tab[i]:=ord(ch)-ord('0');
      if (eof) or (eoln) then break;
      read(ch);
    end;
    fillchar(l,sizeof(l),0);
    l[0]:=(i+5) div 6;
{    for j:=1 to i do Write(tab[j]);Writeln;    }
    j:=0;
    while (i>0) do begin
      p:=1;
      k:=0;
      for ii:=1 to 6 do begin
        if (i+1-ii<1) then break;
        k:=k+p*tab[i+1-ii];
	p:=p*10;
      end;
      inc(j);
      l[j]:=k;
{      Writeln('k=',k);}
      i:=i-6;
    end;
  end;
  
  function l_count(var l:tlong):integer;
  var
    i:integer;
    v:integer;
  begin
    if (l[0]=0) then l_count:=1
    else begin
      i:=(l[0]-1)*6;
      v:=l[l[0]];
      while (v>0) do begin
        inc(i);
	v:=v div 10;
      end;
      if (i=0) then i:=1;
      l_count:=i;
    end;      
  end;
  
  
  procedure write_long(ll:integer;var l:tlong);
  var
    i,j:integer;
    len:integer;
    v,d:integer;
    s:string;
    l_c:integer;
  begin
    l_c:=l_count(l);
    for i:=l_c+1 to ll do Write(' ');
    len:=l[0];
    if len=0 then Write('0');
    for i:=len downto 1 do 
    begin
      v:=l[i];
      if (i=len) then Write(v:1)
      else begin
        s:='';
        for j:=1 to 6 do begin
	  d:=v mod 10;
	  v:=v div 10;
	  s:=chr(ord('0')+d)+s;
	end;
	Write(s);
      end;
    end;
  end;
  
  procedure read_data;
  begin
    read(ch);
    read_long(a);
    op:=ch;
    read(ch);
    read_long(b);    
    
{    Write_long(a);Writeln;
    Write_long(b);Writeln;
    Writeln('op=',op);}
  end;
  
  procedure l_add(var l1,l2,res:tlong);
  var
    i,j:integer;
    m:integer;
    v,v1,v2:integer;
  begin
    i:=1;
    m:=0;
    while (m>0) or (i<=l1[0]) or (i<=l2[0]) do begin
      v1:=0;v2:=0;
      if (i<=l1[0]) then v1:=l1[i];
      if (i<=l2[0]) then v2:=l2[i];
      v:=(v1+v2+m);
      res[i]:=v mod maxp;
      m:=v div maxp;
      res[0]:=i;
      inc(i);
    end;    
  end;
  
  procedure l_sub(var l1,l2,res:tlong);
  var
    i,j:integer;
    len1,len2:integer;
    v,v1,v2:integer;
    m:integer;
  begin
    len1:=l1[0];
    len2:=l2[0];    
    m:=0;
    for i:=1 to len1 do begin
      v1:=l1[i];
      v2:=0;
      if (i<=len2) then v2:=l2[i];
      v1:=v1-m;
      if (v1<v2) then begin v1:=v1+maxp; m:=1; end else m:=0;
      v:=v1-v2;
      res[i]:=v;      
    end;
    res[0]:=len1;
  end;
  
  procedure l_mult1(var l1:tlong;d:integer;var res:tlong);
  var
    i:integer;
    len1:integer;
    m:integer;
    v1,v:integer;
  begin
    if (d=0) then begin res[0]:=0; exit; end;
    len1:=l1[0];
    i:=1;
    m:=0;
    while (i<=len1) or (m>0) do begin
      v1:=0;
      if (i<=len1) then v1:=l1[i];
      v:=v1*d+m;
      res[i]:=v mod maxp;
      m:=v div maxp;
      res[0]:=i;
      inc(i);
    end;
  end;
  
  procedure simplify(var l:tlong);
  var
    i:integer;
  begin
    i:=l[0];
    while (i>0) do begin
      if (l[i]=0) then dec(i) else break;
    end;
    l[0]:=i;
  end;
  
  
  procedure l_shift(var l:tlong;count:integer;var res:tlong);
  var
    i:integer;
    j:integer;
    d:integer;
    v:integer;
    d_no:integer;
    d_no2:integer;
    len:integer;
  begin
    fillchar(res,sizeof(res),0);
    len:=l[0];
    for i:=1 to len do 
    begin
      v:=l[i];
      for j:=1 to 6 do 
      begin
        d:=v mod 10;
	v:=v div 10;
	d_no:=(i-1)*6+j+count+5;
	d_no2:=(j-1)+count;
	inc(res[d_no div 6],d*pp[d_no2 mod 6]);
      end;
    end;
    res[0]:=len+((count+5) div 6);
    simplify(res);
  end;
  
  
  
  procedure write_answer(s1,s2:integer;res:integer);
  var
    i,j:integer;
    m:integer;
    m1:integer;
    l:integer;
  begin
    m:=0;
    m:=l_count(a);
    if (l_count(b)+1)>m then m:=l_count(b)+1;
    m1:=m;
    for i:=s1 to s2 do begin
      j:=l_count(r[i])+i-s1;
      if (j>m) then m:=j;
    end;
    if (l_count(r[res])>m) then m:=l_count(r[res]);
    Write_long(m,a);    Writeln;
    l:=l_count(b);
    for i:=1 to m-l-1 do Write(' ');
    Write(op);
    Write_long(0,b);    Writeln;
    if (s1<s2) then begin
      for i:=1 to m-m1 do Write(' ');
      for i:=1 to m1 do Write('-');
      Writeln;
      for i:=s1 to s2 do 
      begin
        Write_long(m-(i-s1),r[i]);Writeln;
      end;
    end;      
    for i:=1 to m do Write('-');Writeln;
    Write_long(m,r[res]);Writeln;
  end;
  
  
  procedure mult;
  var
    i,j:integer;
    len1:integer;
    d,v:integer;
    k:integer;
    tmp:tlong;
    tmp2:tlong;
  begin
    len1:=b[0];
    k:=0;
    for i:=1 to len1 do begin
      v:=b[i];
{      Writeln('v=',v);}
      for j:=1 to 6 do begin
        d:=v mod 10;
	v:=v div 10;
	inc(k);
{	Writeln('d=',d);}
	l_mult1(a,d,r[k]);	
	simplify(r[k]);
	if (i=len1) and (v=0) then break;
      end;        
    end;
{    Write_long(a);Writeln;
    Write_long(b);Writeln;
    Writeln('---');
    for i:=1 to k do begin
       Write_long(r[i]);
       Writeln;
    end;}
    fillchar(r[k+1],sizeof(r[k+1]),0);    
    for i:=1 to k do begin
      l_shift(r[i],i-1,tmp);
{      Write_long(0,tmp);Writeln;}
      l_add(r[k+1],tmp,tmp2);
      r[k+1]:=tmp2;
    end;
    Write_answer(1,k,k+1);
  end;
  
  
  procedure solve;    
  var
    i:integer;
  begin
    case op of 
      '+':begin
	    l_add(a,b,r[1]);           
	    simplify(r[1]);
{	    Write_long(a);Writeln;
	    Write_long(b);Writeln;
	    Write_long(r[1]);Writeln;      }
	    write_answer(1,0,1);
          end;
      '-':begin
	    l_sub(a,b,r[1]);           
	    simplify(r[1]);
{	    Write_long(a);Writeln;
	    Write_long(b);Writeln;
	    Write_long(r[1]);Writeln;      }
	    write_answer(1,0,1);	    
          end;
      '*':begin
            mult;
          end;
     end;	  	  	  
  end;
  
begin
  init;
  readln(t);
  while (t>0) do begin
    dec(t);
    read_data;
    solve;
    Writeln;
    if (t>0) then readln;
  end;
end.