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

#define MAX 100

void LePolinomio( int *m, double p[] );
void ImprimePolinomio( int n, double r[] );
int AdicionaPol( 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 AdicionaPol( double p[], int m, double q[], int n, double r[] ) {
  int i, g;
  for( i = 0; i <= m || i <= n; i++ ) {
    if ( i > m )
      p[i] = 0;
    if ( i > n )
      q[i] = 0;
    r[i] = p[i] + q[i];
  }
  g = i-1;
  while (g > 0 && r[g] == 0)
    g--;
  return g;
}

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 = AdicionaPol( p, m, q, n, r );

  ImprimePolinomio( gr, r );

  return 0;
}