#include <bits/stdc++.h>
using namespace std;
inline int getint() {
  char c;
  int f = 0, k = 1;
  while (c = getchar(), c > '9' || c < '0')
    if (c == '-') k = -1;
  while (f = (f << 1) + (f << 3) + c - '0', c = getchar(), c >= '0' && c <= '9')
    ;
  return f * k;
}
const int N = 1e5 + 5, INF = 0x3f3f3f3f;
int n, m;
int a[N], num[N];
bool used[N];
int l[N], p[N], f[N], g[N], ans[N];
inline void Print() {
  for (register int i = 1; i <= n; ++i) cerr << ans[i] << " ";
  cerr << endl;
}
int main() {
  n = getint();
  for (register int i = 1; i <= n; ++i) a[i] = getint();
  m = getint();
  for (register int i = 1; i <= m; ++i) num[i] = getint();
  sort(num + 1, num + 1 + m);
  num[0] = -1;
  memset(f, 0x3f, sizeof f);
  f[0] = 0;
  for (register int i = 1; i <= n; ++i) {
    if (a[i] == -1) {
      int pos = n;
      for (register int id = m; id >= 1; --id) {
        int x = num[id];
        while (f[pos] >= x && pos) --pos;
        if (f[pos + 1] >= x) {
          f[pos + 1] = x;
          g[pos + 1] = i;
        }
      }
    } else {
      int x = a[i];
      int pos = lower_bound(f, f + 1 + n, x) - f;
      --pos;
      if (f[pos + 1] >= x) {
        f[pos + 1] = x;
        g[pos + 1] = i;
        l[i] = pos + 1;
        p[i] = g[pos];
      }
    }
  }
  int pos = -1;
  for (register int i = 1; i <= n; ++i)
    if (f[i] < INF) pos = i;
  int len = pos;
  pos = g[pos];
  if (a[pos] == -1)
    ans[pos] = num[m], used[m] = 1;
  else
    ans[pos] = a[pos];
  while (len > 1) {
    if (a[pos] == -1) {
      bool ok = 0;
      for (register int i = pos - 1; i >= 1; --i) {
        if (a[i] != -1) {
          if (l[i] + 1 == len && a[i] < ans[pos]) {
            ok = 1;
            ans[i] = a[i];
            pos = i;
            break;
          }
        }
      }
      if (!ok) {
        for (register int i = pos - 1; i >= 1; --i) {
          if (a[i] == -1) {
            int k = lower_bound(num + 1, num + 1 + m, ans[pos]) - num;
            --k;
            used[k] = 1;
            k = num[k];
            ans[i] = k;
            pos = i;
            break;
          }
        }
      }
    } else {
      if (a[p[pos]] == -1) {
        int k = lower_bound(num + 1, num + 1 + m, ans[pos]) - num;
        --k;
        used[k] = 1;
        k = num[k];
        ans[p[pos]] = k;
      } else
        ans[p[pos]] = a[p[pos]];
      pos = p[pos];
    }
    --len;
  }
  for (register int i = 1; i <= n; ++i)
    if (!ans[i]) ans[i] = a[i];
  pos = m;
  for (register int i = 1; i <= n; ++i) {
    if (ans[i] != -1) continue;
    while (used[pos]) --pos;
    ans[i] = num[pos];
    used[pos] = 1;
  }
  for (register int i = 1; i <= n; ++i) printf("%d ", ans[i]);
  puts("");
  return 0;
}
