#include <bits/stdc++.h>
using namespace std;
inline int read() {
  int X = 0, w = 1;
  char c = getchar();
  while (c < '0' || c > '9') {
    if (c == '-') w = -1;
    c = getchar();
  }
  while (c >= '0' && c <= '9') X = X * 10 + c - '0', c = getchar();
  return X * w;
}
const int N = 100000 + 10;
const int inf = 0x3f3f3f3f;
int n, m, a[N], b[N];
int f[N], g[N], l[N], p[N];
int vis[N], ans[N];
int fd(int w) { return lower_bound(b + 1, b + m + 1, w) - b - 1; }
int main() {
  n = read();
  for (int i = 1; i <= n; ++i) a[i] = read();
  a[++n] = inf;
  m = read();
  for (int i = 1; i <= m; ++i) b[i] = read();
  sort(b + 1, b + m + 1);
  for (int i = 1; i <= n; ++i) f[i] = inf;
  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 x = m, j = n; x; --x) {
        while (f[j] >= b[x]) --j;
        f[j + 1] = b[x], g[j + 1] = i;
      }
    }
  }
  for (int len = l[n], pos = n, val = a[n]; len; --len) {
    if (~a[pos]) {
      if (~a[p[pos]])
        pos = p[pos], val = a[pos];
      else {
        int t = fd(a[pos]);
        vis[t] = 1, pos = p[pos], val = ans[pos] = b[t];
      }
    } else {
      int flag = 0;
      for (int k = pos - 1; k; --k)
        if (~a[k] && a[k] < val && l[k] == len - 1) {
          pos = k, val = a[k];
          flag = 1;
          break;
        }
      if (flag) continue;
      for (int k = pos - 1; k; --k)
        if (!~a[k]) {
          int t = fd(val);
          vis[t] = 1, pos = k, val = ans[pos] = b[t];
          break;
        }
    }
  }
  for (int i = 1, j = 1; i <= n; ++i) {
    if (~a[i])
      ans[i] = a[i];
    else if (!ans[i]) {
      while (vis[j]) ++j;
      vis[j] = 1, ans[i] = b[j];
    }
  }
  for (int i = 1; i < n; ++i) printf("%d%c", ans[i], " \n"[i == n - 1]);
  return 0;
}
