#include <bits/stdc++.h>
using namespace std;
const int N = 100100, INF = 1000010000;
int n, m, x, y, w, L, pre;
int a[N], b[N], d[N], c[N], p[N], f[N], g[N];
vector<int> ve[N];
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
  a[++n] = INF;
  scanf("%d", &m);
  for (int i = 1; i <= m; i++) scanf("%d", &b[i]);
  sort(b + 1, b + m + 1);
  for (int i = 1; i <= n; i++) d[i] = INF;
  for (int i = 1; i <= n; i++) {
    if (~a[i]) {
      x = lower_bound(d + 1, d + n + 1, a[i]) - d;
      d[x] = a[i];
      p[x] = i;
      f[i] = x;
      g[i] = p[x - 1];
      ve[f[i]].push_back(i);
    } else {
      x = n;
      g[i] = pre;
      pre = i;
      for (int j = m; j >= 1; j--) {
        while (x && d[x - 1] >= b[j]) x--;
        d[x] = b[j], p[x] = i;
      }
    }
  }
  w = INF;
  x = n;
  L = lower_bound(d + 1, d + n + 1, INF) - d;
  while (--L) {
    if (f[x])
      x = g[x];
    else {
      y = lower_bound(ve[L].begin(), ve[L].end(), x) - ve[L].begin();
      y&& a[ve[L][y - 1]] < w ? x = ve[L][y - 1] : x = g[x];
    }
    w = ~a[x] ? a[x] : *(lower_bound(b + 1, b + m + 1, w) - 1);
    if (a[x] < 0) c[lower_bound(b + 1, b + m + 1, w) - b] = 1;
    a[x] = w;
  }
  x = 1;
  n--;
  for (int i = 1; i <= n; i++)
    if (a[i] < 0) {
      while (c[x]) x++;
      a[i] = b[x++];
    }
  for (int i = 1; i <= n; i++) cout << a[i] << ' ';
  cout << '\n';
}
