#include <stdio.h>
#include <assert.h>

#define MAX 100

void LePolinomio( int *m, double p[] );
void ImprimePolinomio( int n, double r[] );
int MultiplicaPol( double p[], int m, double q[], int n, double r[] );


void LePolinomio( int *m, double p[] ) {
  int i;
  scanf ( "%d", m ); /* le grau do pol - scanf("%d",& *m);*/
  for ( i = 0; i <= *m; i++ )	/* le cada coeficiente */
    scanf ( "%lf", &p[i] );	
  return;
}

void ImprimePolinomio( int n, double r[] ) {
  int i;
  printf("%g", r[0]);	      /* imprime resultado final */
  for ( i = 1; i <= n; i++ )
    printf(" + %g x^%d", r[i], i);
  printf("\n");
  return;
}

int MultiplicaPol( double p[], int m, double q[], int n, double r[] ) {
  int i, j;
  for ( i = 0; i <= m + n; i++ )
    r[i] = 0;
  for ( i = 0; i <= m; i++ ) { 
    for ( j = 0; j <= n; j++ )
      r[i+j] = r[i+j] + p[i] * q[j];
  }
  return m + n;
}



int main () {
  int m, n, gr;		      /* graus */
  double p[MAX+1], q[MAX+1],  /* coefic. dos polinomios */
    r[2*MAX+1];		      /* polinomio produto */
  
  LePolinomio ( &m, p );   /* le polinomio p(x) de grau m */
  assert( m <= MAX );

  LePolinomio ( &n, q );   /* le polinomio q(x) de grau n */
  assert( n <= MAX );

  gr = MultiplicaPol( p, m, q, n, r );

  ImprimePolinomio( gr, r );

  return 0;
}