#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
const int INF = 0x3f3f3f3f;
int f[N], g[N], l[N], p[N], a[N], b[N], n, m, o, k;
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; ++i) scanf("%d", &a[i]);
  scanf("%d", &m);
  for (int i = 1; i <= m; ++i) scanf("%d", &b[i]);
  sort(b + 1, b + 1 + m);
  m = unique(b + 1, b + 1 + m) - b - 1;
  for (int i = 1; i <= n + 1; ++i) f[i] = INF;
  for (int i = 1; i <= n; ++i) {
    if (~a[i]) {
      int j = lower_bound(f, f + i, a[i]) - f - 1;
      f[j + 1] = a[i];
      g[j + 1] = i;
      l[i] = j + 1;
      p[i] = g[j];
    } else {
      for (int j = i, k = m; k >= 1; --k) {
        while (f[j] >= b[k]) j--;
        f[j + 1] = b[k];
        g[j + 1] = i;
        if (!l[i]) l[i] = j + 1;
      }
    }
  }
  o = 0;
  k = m;
  for (int i = 1; i <= n; ++i)
    if (l[o] < l[i]) o = i;
  a[n + 1] = INF;
  l[n + 1] = l[o] + 1;
  for (int i = o, j = n + 1; i; swap(i, j)) {
    if (a[i] == -1) {
      while (b[k] >= a[j]) k--;
      a[i] = b[k];
      b[k] = -1;
      k--;
      l[i] = l[j] - 1;
      j = -1;
      for (int r = i - 1; r >= 0; --r) {
        if (l[r] == l[i] - 1 && a[r] < a[i] && a[r] != -1) {
          j = r;
          break;
        }
      }
      if (j == -1) {
        for (int r = i - 1; r >= 0; --r) {
          if (a[r] == -1) {
            j = r;
            break;
          }
        }
      }
    } else
      j = p[i];
  }
  for (int i = 1, j = 1; i <= n; ++i) {
    if (~a[i]) continue;
    while (b[j] == -1) j++;
    a[i] = b[j];
    b[j] = -1;
  }
  for (int i = 1; i <= n; ++i) printf("%d ", a[i]);
  printf("\n");
}
