#include <bits/stdc++.h>
using namespace std;
const int oo = 2139063143;
const int N = 1010000;
const int P = 1000000007;
const double eps = 1e-7;
template <typename T>
inline void sc(T &x) {
  x = 0;
  static int p;
  p = 1;
  static char c;
  c = getchar();
  while (!isdigit(c)) {
    if (c == '-') p = -1;
    c = getchar();
  }
  while (isdigit(c)) {
    x = (x << 1) + (x << 3) + (c - 48);
    c = getchar();
  }
  x *= p;
}
template <typename T>
inline void print(T x) {
  if (x < 0) putchar('-'), x = -x;
  if (x >= 10) print(x / 10);
  putchar(x % 10 + '0');
}
template <typename T>
inline void pr(T x) {
  print(x), putchar(' ');
}
template <typename T1, typename T2>
void chkmax(T1 &A, T2 B) {
  A = A >= B ? A : B;
}
template <typename T1, typename T2>
void chkmin(T1 &A, T2 B) {
  A = A <= B ? A : B;
}
int n, m;
int a[N], b[N];
int f[N], g[N], len[N], pre[N];
int ans[N];
bool vis[N];
int get(int w, int k) {
  int p = lower_bound(b + 1, b + m + 1, k) - b - 1;
  return vis[p] = 1, ans[w] = b[p];
}
int main() {
  sc(n);
  for (int i = 1; i <= n; i++) sc(a[i]);
  a[++n] = oo;
  sc(m);
  for (int i = 1; i <= m; i++) sc(b[i]);
  sort(b + 1, b + m + 1);
  for (int i = 1; i <= n; i++) f[i] = oo;
  f[0] = 0;
  int an = 0;
  for (int i = 1; i <= n; i++) {
    if (a[i] > 0) {
      int p = lower_bound(f + 1, f + n + 1, a[i]) - f - 1;
      len[i] = p + 1, pre[i] = g[p], f[p + 1] = a[i], g[p + 1] = i;
      chkmax(an, p + 1);
    } else {
      int p = an;
      for (int j = m; j >= 1; j--) {
        while (f[p] >= b[j]) --p;
        f[p + 1] = b[j], g[p + 1] = i;
        chkmax(an, p + 1);
      }
    }
  }
  int p = n, x = a[N];
  while (an--)
    if (a[p] != -1) {
      if (a[pre[p]] == -1)
        x = get(pre[p], a[p]);
      else
        x = a[pre[p]];
      p = pre[p];
    } else {
      bool fg = 0;
      for (int i = p - 1; i >= 1; i--)
        if (a[i] != -1 && len[i] == an && a[i] < x) {
          x = a[i], p = i, fg = 1;
          break;
        }
      if (fg) continue;
      for (int i = p - 1; i >= 1; i--)
        if (a[i] == -1) {
          x = get(i, x), p = i;
          break;
        }
    }
  for (int i = 1, j = 1; i <= n; i++)
    if (a[i] == -1) {
      if (ans[i]) continue;
      while (vis[j]) ++j;
      vis[j] = 1, ans[i] = b[j];
    } else
      ans[i] = a[i];
  for (int i = 1; i < n; i++) pr(ans[i]);
  return 0;
}
