#include <bits/stdc++.h>
using namespace std;
template <typename T>
void read(T &x) {
  x = 0;
  int f = 1;
  char ch = getchar();
  while (!isdigit(ch)) {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (isdigit(ch)) {
    x = x * 10 + ch - '0';
    ch = getchar();
  }
  x *= f;
}
inline void write(int x) {
  if (x > 9) write(x / 10);
  putchar(x % 10 + '0');
}
const int N = 100005, M = 100005, INF = 1e9 + 9;
int mn[N], pos[N], mx;
int n, a[N], f[N], g[N], m, b[M];
int main() {
  register int i, j, p;
  read(n);
  for (i = 1; i <= n; ++i) read(a[i]), mn[i] = INF;
  a[++n] = INF - 1;
  mn[n] = INF;
  read(m);
  for (i = 1; i <= m; ++i) read(b[i]);
  sort(b + 1, b + m + 1);
  for (i = 1; i <= n; ++i) {
    if (a[i] != -1) {
      p = lower_bound(mn, mn + mx + 1, a[i]) - mn;
      if (p > mx) ++mx;
      if (a[i] < mn[p]) mn[p] = a[i], pos[p] = i;
      f[i] = p, g[i] = pos[p - 1];
      continue;
    }
    for (p = mx + 1, j = m; j; --j) {
      while (p && b[j] <= mn[p - 1]) --p;
      if (b[j] < mn[p]) mn[p] = b[j], pos[p] = i;
    }
    f[i] = -1;
    if (pos[mx + 1]) ++mx;
  }
  int now = n, nowlen = f[n], nowv = a[n];
  while (nowlen) {
    if (a[now] != -1) {
      --nowlen, nowv = a[now], now = g[now];
      continue;
    }
    for (i = m; i; --i)
      if (b[i] != -1 && b[i] < nowv) {
        a[now] = b[i];
        b[i] = -1;
        break;
      }
    for (i = now - 1; i; --i)
      if (f[i] == nowlen - 1 && a[i] < a[now]) {
        g[now] = i;
        break;
      }
    if (!g[now])
      for (i = now - 1; i; --i)
        if (a[i] == -1) {
          g[now] = i;
          break;
        }
    --nowlen, nowv = a[now], now = g[now];
  }
  for (i = 1; i <= n; ++i)
    if (a[i] == -1)
      for (j = 1; j <= m; ++j)
        if (b[j] != -1) {
          a[i] = b[j];
          b[j] = -1;
          break;
        }
  for (i = 1; i < n; ++i) write(a[i]), putchar(i < n ? ' ' : '\n');
  return 0;
}
