#include <bits/stdc++.h>
int n, m, a[100010], book[100010], b[100010], kk[100010], youl, d[100010],
    f[100010], p[100010], fr[100010];
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) scanf("%d", a + i);
  a[++n] = 0x3f3f3f3f;
  scanf("%d", &m);
  for (int i = 1; i <= m; i++) scanf("%d", b + i);
  std::sort(b + 1, b + m + 1);
  for (int i = 1; i <= n + 1; i++) d[i] = 0x7fffffff;
  for (int i = 1; i <= n; i++) {
    if (a[i] == -1) {
      kk[++youl] = i;
      static int tmp[100010];
      for (int i = 1; i <= n; i++) tmp[i] = d[i];
      int pt = 0;
      for (int j = 1; j <= m; j++) {
        while (tmp[pt] < b[j]) ++pt;
        if (b[j] <= d[pt]) {
          p[pt] = i;
          f[i] = pt;
          fr[i] = p[pt - 1];
          d[pt] = b[j];
        }
      }
    } else {
      int pos = std::lower_bound(d + 1, d + n + 1, a[i]) - d;
      d[pos] = a[i];
      f[i] = pos;
      fr[i] = p[pos - 1];
      p[pos] = i;
    }
  }
  int k = f[n];
  for (int i = n, lst = 0x7fffffff; i >= 1;) {
    if (a[i] != -1)
      lst = a[i], i = fr[i];
    else {
      int pt = 0;
      for (int j = 1; j < i; j++)
        if (a[j] != -1 && f[j] == k && a[j] < lst) pt = j;
      if (pt) {
        i = pt;
        continue;
      }
      int nw = std::lower_bound(b + 1, b + m + 1, lst) - b - 1;
      lst = a[i] = b[nw];
      book[nw] = 1;
      for (int j = 1; j < i; j++)
        if (a[j] != -1 && f[j] == k - 1 && a[j] < lst) pt = j;
      if (!pt) pt = *(std::lower_bound(kk + 1, kk + youl + 1, i) - 1);
      i = pt;
    }
    --k;
    if (!k) break;
  }
  int pt = 1;
  for (int i = 1; i < n; i++) {
    while (book[pt]) ++pt;
    printf("%d ", a[i] != -1 ? a[i] : b[pt++]);
  }
  return 0;
}
