#include"stdio.h"
#include"iostream.h"

char zad1[600],zad2[600],zad3[1002];
char mn[53][503];
int dll[11];
int n,h;
char dzial;

void format()
{
 int i,j;
 for (i=0; zad3[i]>='0'; i++)  
      zad1[i]=zad3[i];
 zad1[i]=0;
 dzial=zad3[i];
 j=i+1;
 for (; zad3[j]; j++)
       zad2[j-i-1]=zad3[j]; 
    zad2[j-i-1]=0;
}

int dlug(char *co)
{
 int i;
 for (i=0; co[i]; i++);
 return i;
}
 int k,l,max_d;

void dodaj(char* co1, char* co2, int ll)
{ 
 k=dlug(co1);
 l=dlug(co2);
 max_d=k>l?k:l;
 int wynik=0,t;
 int przenies=0;
 int c1,c2;
 for (t=0; t<max_d; t++)
     {
      if (t>=k) c1=0;
          else c1=co1[k-t-1]-'0';
      if (t>=l) c2=0;
          else c2=co2[l-t-1]-'0';
      wynik=przenies+c1+c2;
      przenies=wynik/10;
      wynik=wynik%10;
      mn[ll][t]='0'+wynik;
     }
 if (przenies)
     mn[ll][t++]='1';
 mn[ll][t]=0;
};

void odejmij(char* co1, char* co2, int ll)
{ 
 k=dlug(co1);
 l=dlug(co2);
 max_d=k>l?k:l;
 int wynik=0,t;
 int przenies=0;
 int c1,c2;
 for (t=0; t<max_d; t++)
     {
      if (t>=k) c1=0;
          else c1=co1[k-t-1]-'0';
      if (t>=l) c2=0;
          else c2=co2[l-t-1]-'0';
      wynik=przenies+c1-c2;
      if (wynik<0) {przenies=-1; wynik+=10;}
          else przenies=0;
      wynik=wynik%10;
      mn[ll][t]='0'+wynik;
     }
     while (mn[ll][t-1]=='0')
         {
	  if (t>0) t--;
	      else break;
	 }
 if (t==0)
     {
      mn[ll][0]='0';
      t++;
     };
 mn[ll][t]=0;
};

void wyswietl_d()
{
 int o;
 if (k>l+1) max_d=k;
     else max_d=l+1;
 int p=dlug(mn[0]);
 if (p>max_d) max_d=p;
 o=max_d;
 for (; o>0; o--)
     {
      if (o>k) printf(" ");
          else printf("%c",zad1[k-o]);
     }
 printf("\n");
 for (o=max_d; o>0; o--)
     {
      if (o>l) 
          {
	   if(o-l==1)
              printf("+");	else
		   printf(" ");
	  }
          else printf("%c",zad2[l-o]);
     }
 printf("\n");
 for (o=max_d; o>0; o--)
     {
      printf("-");
     }
 printf("\n");
 for (o=max_d; o>=0; o--)
     {
      if (o>p) printf(" ");
          else if (mn[0][o])printf("%c",mn[0][o]);
     }
 printf("\n");
 printf("\n"); 
}
void wyswietl_o()
{
 int o;
 if (k>l+1) max_d=k;
     else max_d=l+1;
 int p=dlug(mn[0]);
 if (p>max_d) max_d=p;
 o=max_d;
 for (; o>0; o--)
     {
      if (o>k) printf(" ");
          else printf("%c",zad1[k-o]);
     }
 printf("\n");
 for (o=max_d; o>0; o--)
     {
      if (o>l) 
          {
	   if(o-l==1)
              printf("-");	else
		   printf(" ");
	  }
          else printf("%c",zad2[l-o]);
     }
 printf("\n");
 for (o=max_d; o>0; o--)
     {
      printf("-");
     }
 printf("\n");
 for (o=max_d; o>=0; o--)
     {
      if (o>p) printf(" ");
          else if (mn[0][o]) printf("%c",mn[0][o]);
     }
 printf("\n");
 printf("\n"); 
}

void dodaj_p(char* co1, char* co2, int il_przes)
{ 
 l=dlug(co2);
 max_d=l+il_przes;
 int wynik=0,t;
 int przenies=0;
 int c1,c2;
 for (t=il_przes; t<max_d; t++)
     {
      c1=co1[t]-'0';
      c2=co2[t-il_przes]-'0';
      wynik=przenies+c1+c2;
      przenies=wynik/10;
      wynik=wynik%10;
      co1[t]='0'+wynik;
     }
 if (przenies)
     co1[t++]+=1;
};

void mnoz_c(char *co, int l_)
{
 if (l_==0)
     {
      mn[0][0]='0';
      mn[0][1]=0;
      dll[0]=1;
     }
     else
     {
      int reszta=0,wynik;
      int kk,pol=dlug(co);
      for (kk=0; kk<pol; kk++)
          {
	   wynik=reszta+l_*(co[pol-kk-1]-'0');
	   reszta=wynik/10;
	   wynik=wynik%10;
	   mn[l_][kk]=wynik+'0';
	  };
      if (reszta)
          mn[l_][kk++]=reszta+'0';
	mn[l_][kk]=0;
	dll[l_]=kk;
     }
}

void odwroc()
{
 char ty;
 for (int y=1; y<10; y++)
     {
      int zzz=dll[y];
      for (int h=0; h<zzz/2; h++)
          {
	   ty=mn[y][h];
	   mn[y][h]=mn[y][zzz-h-1];
	   mn[y][zzz-h-1]=ty;
	  }
     }
}

void mnoz()
{
 int pp,dl_2,dl_calk;
 dl_2=dlug(zad2);
 for (int pop=0; pop<1001; pop++)
     zad3[pop]='0';
 zad3[1001]=0;
 for (pp=0; pp<10; pp++)
      mnoz_c(zad1,pp);
 for (pp=0; pp<dl_2; pp++)
      dodaj_p(zad3,mn[zad2[dl_2-pp-1]-'0'],pp);
 if (zad3[max_d]=='0')
      zad3[max_d]=0;
      else
      zad3[max_d+1]=0;      
 dl_calk=dlug(zad3);//dl_2+dll[zad2[dl_2-pp-1]];
 if (dl_calk<dlug(zad1)) dl_calk=dlug(zad1);
 if (dl_calk<dlug(zad2)+1) dl_calk=dlug(zad2)+1;

odwroc();
 
 int o;
 max_d=dl_calk;//dlug(zad3);
 k=dlug(zad1);
 l=dlug(zad2);
 o=max_d;
 for (; o>0; o--)
     {
      if (o>k) printf(" ");
          else printf("%c",zad1[k-o]);
     }
 printf("\n");
 for (o=max_d; o>0; o--)
     {
      if (o>l) 
          {
	   if(o-l==1)
              printf("*");	else
		   printf(" ");
	  }
          else printf("%c",zad2[l-o]);
     }
 printf("\n");
if (dlug(zad2)!=1)
{
 for (o=max_d-dlug(zad2)-1; o>0; o--)
     {
      printf(" ");
     }
 for (o=max_d; o>max_d-dlug(zad2)-1; o--)
     {
      printf("-");
     }
 printf("\n");
 
 for (pp=0; pp<dl_2; pp++)
     {
      int poz;
      for (poz=0; poz<dl_calk-pp-dlug(mn[zad2[dl_2-pp-1]-'0']); poz++)
	   printf(" ");
      printf(mn[zad2[dl_2-pp-1]-'0']);
      printf("\n");
     }
     
     }
 if (max_d==dlug(zad3))
     for (o=max_d; o>0; o--)
	  printf("-");
	 else
	 {printf(" ");
     for (o=max_d-1; o>0; o--)
	  printf("-");}

 printf("\n");
 for (int bal=0; bal<max_d; bal++)
     if (zad3[max_d-bal-1])
       printf("%c",zad3[max_d-bal-1]);
       else
       printf(" ");
 printf("\n");
 if (h!=n-1) printf("\n"); 
}

void wyswietl_m()
{
// printf(zad3); // niewywolywane
}

int main()
{
 scanf("%d",&n);
 for (h=0; h<n; h++)
     {
      scanf("%s",zad3);
      format();
      switch(dzial)
          {
	   case '+'	: dodaj(zad1,zad2,0);
	                  wyswietl_d();
			  break;
	   case '-'	: odejmij(zad1,zad2,0);
	                   wyswietl_o();
			   break;
	   case '*'	: mnoz();
	                   wyswietl_m();
	                   break;
	  }
     }
 return 0;
}