/* prog5.9.c */

#include <stdio.h>

#define NMAX 1000

/* Devolvemos o numero de elementos na sequencia resultante. */
int merge_sem_repeticao(int a[], int b[], int c[], int m, int n);

int leia_vetor(int a[]);
void imprima_vetor(int a[], int n);

int main()
{
  int m, n, r;
  int a[NMAX], b[NMAX], c[NMAX];
  
  m=leia_vetor(a);
  n=leia_vetor(b);

  r=merge_sem_repeticao(a, b, c, m, n);

  imprima_vetor(c, r);

  return 0;
}

int merge_sem_repeticao(int a[], int b[], int c[], int m, int n)
{
  int i, j, k;
  int t;

  if ((m==0)&&(n==0)) return 0;

  i=j=k=0;
  if ((m>0)&&(n==0)) 
    { c[0]=a[i]; i++; k++; }
  if ((m==0)&&(n>0))
    { c[0]=b[j]; j++; k++; }
  if ((m>0)&&(n>0)) {
    c[0]=(a[0]<b[0])?a[0]:b[0];
    k++;
    if (a[0]==c[0]) i++;
    if (b[0]==c[0]) j++;
  }

  while ((i<m)&&(j<n)) {
    t=(a[i]<b[j])?a[i]:b[j];
    if (c[k-1]<t)
      { c[k]=t; k++; }
    while ((i<m)&&(a[i]==t)) i++;
    while ((j<n)&&(b[j]==t)) j++;
  }

  while (i<m) {
    if (c[k-1]<a[i])
      { c[k]=a[i]; k++; }
    while ((i<m)&&(a[i]==c[k-1])) i++;
  }
  
  while (j<n) {
    if (c[k-1]<b[j])
      { c[k]=b[j]; k++; }
    while ((j<n)&&(b[j]==c[k-1])) j++;
  }

  return k;
}    

int leia_vetor(int a[])
{
  int k, n;

  scanf("%d", &n);

  for (k=0; k<n; k++) 
    scanf("%d", &a[k]);

  return n;
}
             
void imprima_vetor(int a[], int n)
{
  int k;

  for (k=0; k<n; k++) 
    printf("%d ", a[k]);
  printf("\n");
}
