#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10, inf = 1 << 30;
int rd() {
  int x = 0, w = 1;
  char ch = 0;
  while (ch < '0' || ch > '9') {
    if (ch == '-') w = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    x = x * 10 + (ch ^ 48);
    ch = getchar();
  }
  return x * w;
}
int n, a[N], m, b[N], f[N][2], g[N][2], na;
int main() {
  n = rd();
  for (int i = 1; i <= n; ++i) a[i] = rd();
  a[++n] = inf;
  m = rd();
  for (int i = 1; i <= m; ++i) b[i] = rd();
  sort(b + 1, b + m + 1);
  for (int i = 1; i <= n; ++i) f[i][0] = inf + 1;
  for (int i = 1; i <= n; ++i) {
    if (~a[i]) {
      if (f[na][0] < a[i])
        ++na, f[na][0] = a[i], f[na][1] = i, g[i][0] = a[i],
              g[i][1] = f[na - 1][1];
      else {
        int l = 0, r = na - 1;
        while (l <= r) {
          int mid = (l + r) >> 1;
          if (f[mid][0] < a[i])
            l = mid + 1;
          else
            r = mid - 1;
        }
        if (f[l][0] >= a[i])
          f[l][0] = a[i], f[l][1] = i, g[i][0] = a[i], g[i][1] = f[l - 1][1];
      }
    } else {
      for (int i = m, j = na; i; --i) {
        while (f[j][0] >= b[i]) --j;
        if (f[j + 1][0] >= b[i]) f[j + 1][0] = b[i], f[j + 1][1] = f[j][1];
      }
      if (f[na + 1][0] <= inf) ++na;
    }
  }
  int x = f[na][1], mm = m;
  while (x) {
    int nx = g[x][1], ls = g[x][0];
    for (int i = x - 1; i > nx; --i) {
      if (~a[i]) continue;
      while (b[mm] >= ls && b[mm] > g[nx][0]) --mm;
      if (b[mm] <= g[nx][0]) break;
      if (mm) ls = a[i] = b[mm], b[mm] = 0, --mm;
    }
    x = nx;
  }
  for (int i = 1, j = m; i < n; ++i) {
    while (j && !b[j]) --j;
    printf("%d ", (~a[i]) ? a[i] : b[j--]);
  }
  return 0;
}
