#include <bits/stdc++.h>
#pragma GCC optimize(2)
using namespace std;
const int INF = 0x3f3f3f3f;
const int maxn = 100010;
inline int read() {
  int x = 0, f = 1;
  char ch = 0;
  while (!isdigit(ch)) {
    ch = getchar();
    if (ch == '-') f = -1;
  }
  while (isdigit(ch)) x = x * 10 + ch - 48, ch = getchar();
  return x * f;
}
int n, m;
int a[maxn], b[maxn], low[maxn], pre[maxn], f[maxn], la[maxn];
int gap[maxn];
void work() {
  memset(low, 63, sizeof(low));
  pre[1] = low[1] = 0, f[1] = la[1] = 1;
  for (int k = 2; k <= n; ++k) {
    if (a[k] + 1) {
      int L = 1, R = n;
      while (L <= R) {
        int mid = (L + R) >> 1;
        if (low[mid] < a[k])
          L = mid + 1;
        else
          R = mid - 1;
      }
      pre[k] = la[L - 1];
      la[L] = k;
      f[k] = L, low[L] = a[k];
    } else {
      pre[k] = -1, f[k] = -1;
      int j = n;
      for (int i = m; i >= 1; i--) {
        while (low[j] >= b[i]) j--;
        low[j + 1] = b[i], la[j + 1] = -1;
      }
    }
  }
}
void work2() {
  int L, R, rem = m;
  int x = n;
  while (x)
    if (a[x] + 1) {
      if (pre[x] >= 0) {
        x = pre[x];
        continue;
      }
      R = lower_bound(b + 1, b + rem + 1, a[x]) - b - 1;
      for (int y = x - 1; y != 0; y--) {
        if (a[y] == -1 || a[y] >= a[x]) continue;
        L = upper_bound(b + 1, b + rem + 1, a[y]) - b;
        if (f[x] - f[y] - 1 == min(R - L + 1, gap[x] - gap[y])) {
          for (int i = y, j = L; i <= x && j <= R; i++)
            if (a[i] == -1) a[i] = b[j], b[j] = -1, j++;
          x = y;
          rem = L - 1;
          break;
        }
      }
    }
  for (int i = 1, j = 1; i <= n; ++i) {
    if (a[i] + 1) continue;
    while (b[j] == -1) ++j;
    a[i] = b[j];
    b[j++] = -1;
  }
}
int main() {
  n = read();
  a[1] = 0;
  a[n + 2] = INF;
  for (int i = 2; i <= n + 1; ++i)
    a[i] = read(), gap[i] = gap[i - 1] + (a[i] == -1);
  m = read();
  gap[n + 2] = gap[n + 1];
  n += 2;
  for (int i = 1; i <= m; ++i) b[i] = read();
  sort(b + 1, b + m + 1);
  m = unique(b + 1, b + m + 1) - b - 1;
  work();
  work2();
  for (int i = 2; i < n; ++i) printf("%d ", a[i]);
}
