#include <bits/stdc++.h>
using namespace std;
const int RLEN = 1 << 20 | 1;
inline char gc() {
  static char ibuf[RLEN], *ib, *ob;
  (ib == ob) && (ob = (ib = ibuf) + fread(ibuf, 1, RLEN, stdin));
  return (ib == ob) ? EOF : *ib++;
}
inline int read() {
  char ch = gc();
  int res = 0;
  bool f = 1;
  while (!isdigit(ch)) f ^= ch == '-', ch = gc();
  while (isdigit(ch)) res = (res + (res << 2) << 1) + (ch ^ 48), ch = gc();
  return f ? res : -res;
}
inline long long readll() {
  char ch = gc();
  long long res = 0;
  bool f = 1;
  while (!isdigit(ch)) f ^= ch == '-', ch = gc();
  while (isdigit(ch)) res = (res + (res << 2) << 1) + (ch ^ 48), ch = gc();
  return f ? res : -res;
}
inline int readstring(char *s) {
  int top = 0;
  char ch = gc();
  while (isspace(ch)) ch = gc();
  while (!isspace(ch) && ch != EOF) s[++top] = ch, ch = gc();
  return top;
}
template <typename tp>
inline void chemx(tp &a, tp b) {
  a < b ? a = b : 0;
}
template <typename tp>
inline void chemn(tp &a, tp b) {
  a > b ? a = b : 0;
}
const int N = 100005, inf = 1e9 + 6;
int n, k, m;
int a[N], b[N], vis[N], ans[N];
int f[N], g[N], r[N], p[N], q[N];
int main() {
  n = read();
  for (int i = 1; i <= n; i++) a[i] = read(), p[i] = inf;
  m = read();
  n++, a[n] = p[n] = inf;
  for (int i = 1; i <= m; i++) b[i] = read();
  sort(b + 1, b + m + 1);
  for (int i = 1; i <= n; i++) {
    if (~a[i]) {
      int j = lower_bound(p + 1, p + n + 1, a[i]) - p - 1;
      f[i] = j + 1, g[i] = q[j];
      if (p[j + 1] > a[i]) p[j + 1] = a[i], q[j + 1] = i;
    } else {
      for (int j = m, k = n; j; j--) {
        while (k && p[k] >= b[j]) k--;
        if (p[k + 1] > b[j]) p[k + 1] = b[j], q[k + 1] = i;
      }
    }
  }
  int i = f[n], j = n, v = a[n];
  while (i--) {
    if (~a[j]) {
      if (a[g[j]] == -1) {
        int ps = lower_bound(b + 1, b + m + 1, a[j]) - b - 1;
        vis[ps] = 1, v = ans[g[j]] = b[ps];
      } else
        v = a[g[j]];
      j = g[j];
    } else {
      bool fg = 0;
      for (int k = j - 1; k; k--) {
        if (a[k] != -1 && f[k] == i && a[k] < v) {
          j = k;
          v = a[j];
          fg = 1;
          break;
        }
      }
      if (fg) continue;
      for (int k = j - 1; k; k--)
        if (a[k] == -1) {
          int ps = lower_bound(b + 1, b + m + 1, v) - b - 1;
          vis[ps] = 1, v = ans[k] = b[ps];
          j = k;
          break;
        }
    }
  }
  for (int i = 1, j = 1; i < n; i++)
    if (a[i] == -1) {
      if (ans[i]) continue;
      while (vis[j]) j++;
      ans[i] = b[j], vis[j] = 1;
    } else
      ans[i] = a[i];
  for (int i = 1; i < n; i++) cout << ans[i] << " ";
  return 0;
}
