#include <bits/stdc++.h>
using namespace std;
const int maxn = 100005, Inf = 1e9;
inline int gi() {
  char c = getchar();
  bool f = 1;
  while (c != '-' && (c < '0' || c > '9')) c = getchar();
  if (c == '-') c = getchar(), f = 0;
  int sum = 0;
  while ('0' <= c && c <= '9') sum = sum * 10 + c - 48, c = getchar();
  return f ? sum : -sum;
}
int n, m, a[maxn], b[maxn], l[maxn], p[maxn], f[maxn], g[maxn], v[maxn],
    ans[maxn];
inline void get(int i, int k, int &x) {
  int o = lower_bound(b + 1, b + m + 1, k) - b - 1;
  v[o] = 1, x = ans[i] = b[o];
}
int main() {
  n = gi();
  for (int i = 1; i <= n; ++i) a[i] = gi(), f[i] = Inf;
  ++n;
  a[n] = f[n] = Inf;
  m = gi();
  for (int i = 1; i <= m; ++i) b[i] = gi();
  sort(b + 1, b + m + 1);
  m = unique(b + 1, b + m + 1) - b - 1;
  for (int i = 1; i <= n; ++i) {
    if (~a[i]) {
      int j = lower_bound(f + 1, f + n + 1, a[i]) - f - 1;
      l[i] = j + 1;
      p[i] = g[j];
      f[j + 1] = a[i];
      g[j + 1] = i;
    } else {
      for (int j = n, k = m; k; --k) {
        while (f[j] >= b[k]) --j;
        f[j + 1] = b[k];
        g[j + 1] = i;
      }
    }
  }
  int i = l[n], j = n, x = a[n];
  while (i--) {
    if (~a[j]) {
      if (!~a[p[j]])
        get(p[j], a[j], x);
      else
        x = a[p[j]];
      j = p[j];
    } else {
      bool ok = 0;
      for (int s = j - 1; s; s--)
        if (~a[s] && l[s] == i && a[s] < x) {
          x = a[j = s], ok = 1;
          break;
        }
      if (ok) continue;
      for (int s = j - 1; s; s--)
        if (!~a[s]) {
          get(s, x, x), j = s;
          break;
        }
    }
  }
  for (int i = 1, j = 1; i <= n; i++)
    if (!~a[i]) {
      if (ans[i]) continue;
      while (v[j]) ++j;
      v[j] = 1, ans[i] = b[j];
    } else
      ans[i] = a[i];
  for (int i = 1; i < n; i++) printf("%d ", ans[i]);
  return 0;
}
