program Arith;

const
    MAX_N = 1024;
    MAX_L = 600;
    
type
    TLiczba = record
	Digit: array [0..MAX_N-1] of Integer;
	Len: Integer;
    end;

{**** OUT ****}    
var
    line: array [0..MAX_L-1, 0..MAX_N-1] of Char;
    linelen: array [0..MAX_L-1] of Integer;
    linecount: Integer;
    
procedure outchar(c: Char);
begin
    line[linecount, linelen[LineCount]] := c;
    Inc(LineLen[LineCount]);
end;

procedure OutLn;
begin
    Inc(LineCount);
    LineLen[LineCount] := 0;
end;

procedure OutInit;
begin
    LineCount := 0;
    LineLen[LineCount] := 0;
end;

procedure Powieksz(var a: Integer; b: Integer);
begin
    if b > a then a := b;
end;

procedure Pisz(c: Char; l: Integer);
begin
    while l > 0 do
    begin
	Write(c);
	Dec(l);
    end;
end;

procedure PiszOut;
var
    a, b, c, m, msf: Integer;
begin
    m := -1;
    for a := 0 to LineCount-1 do
	Powieksz(m, LineLen[a]);
    msf := 0;
    for a := 0 to LineCount-1 do
    begin
	if LineLen[a] = 0 then
	begin
	    msf := LineLen[a-1];
	    Powieksz(msf, LineLen[a+1]);
	    Pisz(' ', m - msf);
	    Pisz('-', msf);
	end else
	begin
	    Powieksz(msf, LineLen[a]);
	    Pisz(' ', m-LineLen[a]);
	    c := 0;
	    while Line[a,c] = ' ' do
		Inc(c);
	    for b := LineLen[a]-1 downto c do
		Write(Line[a,b]);
	end;
{	Write('<'); {@@@@DEBUG}
	Writeln;
    end;
end;

procedure WypiszLiczbe(var l: TLiczba);
var
    a: Integer;
begin
    for a := 0 to l.len-1 do
	OutChar(Chr(l.Digit[a]+48));
end;

{**** INPUT ****}

var
    inchar, Op: Char;
    l1, l2: TLiczba;
    
procedure CzytajLiczbe(var l: TLiczba);
var
    arr: array [0..MAX_N-1] of Integer;
    a, arrl: Integer;
begin
    arrl := 0;
    while inchar in ['0'..'9'] do
    begin
	arr[arrl] := Ord(inchar)-48;
	Inc(arrl);
	Read(inchar);
    end;
    l.len := arrl;
    for a := 0 to arrl-1 do
	l.digit[a] := arr[arrl-1-a];
end;

procedure Odczytaj;
begin
    inchar := ' ';
    while not (inchar in ['0'..'9']) do
	Read(inchar);
    CzytajLiczbe(l1);
    Op := inchar;
    Read(inchar);
    CzytajLiczbe(l2);
end;

procedure UstawDl(var l: TLiczba; len: Integer);
begin
    while l.len < len do
    begin
	l.digit[l.len] := 0;
	Inc(l.len);
    end;
end;

procedure UstawCyfre(var l: TLiczba; c, v: Integer);
begin
    UstawDl(l, c+1);
    l.digit[c] := v;
end;

function WezCyfre(var l: TLiczba; c: Integer): Integer;
begin
    if c >= l.len then
	WezCyfre := 0
    else
	WezCyfre := l.digit[c];
end;

procedure Norm(var l: TLiczba);
var
    a, c: Integer;
begin
    a := 0;
    c := 0;
    while (a < l.len) or (c <> 0) do
    begin
	c := WezCyfre(l, a)+c+1000;
	UstawCyfre(l, a, c mod 10);
	c := c div 10 - 100;
	Inc(a);
    end;
    while (l.len>1) and (l.digit[l.len-1] = 0) do Dec(l.len);
end;

procedure DodajLiczbe(var Akk, Skl: TLiczba; Przes: Integer);
var
    a: Integer;
begin
    for a := 0 to Skl.len-1 do
	UstawCyfre(Akk, a+Przes, WezCyfre(Akk, a+Przes) + WezCyfre(Skl, a));
    Norm(Akk);
end;

procedure Dodaj;
begin
    DodajLiczbe(l1, l2, 0);
    WypiszLiczbe(l1);
    OutLn;
end;

procedure Odejmij;
var
    a: Integer;
begin
    for a := 0 to l2.len-1 do
	UstawCyfre(l1, a, WezCyfre(l1, a) - WezCyfre(l2, a));
    Norm(l1);
    WypiszLiczbe(l1);
    OutLn;
end;

procedure KopiujLicz(var a, b: TLiczba);
var
    i: Integer;
begin	
    a.len := b.len;
    for i := 0 to b.len-1 do
	a.digit[i] := b.digit[i];
end;

procedure MnozCyfr(var Akk: TLiczba; d: Integer);
var
    i: Integer;
begin
    for i := 0 to Akk.len-1 do
	Akk.Digit[i] := Akk.Digit[i]*d;
    Norm(Akk);
end;

procedure Mnoz;
var
    Wyn, p: TLiczba;
    a, b: Integer;
begin
    if l2.len = 1 then
    begin
	MnozCyfr(l1, l2.digit[0]);
	WypiszLiczbe(l1);
	Outln;
	Exit;
    end;
    Wyn.Len := 0;
    for a := 0 to l2.len-1 do
    begin
	KopiujLicz(p, l1);
	MnozCyfr(p, l2.digit[a]);
	for b := 1 to a do
	    OutChar(' ');
	WypiszLiczbe(p);
	Outln;
	DodajLiczbe(Wyn, p, a);
    end;
    Outln;
    WypiszLiczbe(Wyn);
    Outln;
end;

{**** PROG ****}

procedure Naglowek;
begin
    WypiszLiczbe(l1);
    OutLn;
    WypiszLiczbe(l2);
    OutChar(op);
    OutLn;
    OutLn;
end;

{**** MAIN ****}

var
    d: Integer;
    
begin
    Readln(d);
    while d > 0 do
    begin
	OutInit;
	Odczytaj;
	Naglowek;
	case Op of
	    '+': Dodaj;
	    '-': Odejmij;
	    '*': Mnoz;
	end;
	PiszOut;
	Writeln;
	Dec(d);
    end;
end.