#include <bits/stdc++.h>
using namespace std;
int read() {
  char ch = getchar();
  int x, f = 1;
  while (ch < '0' || ch > '9') {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  x = ch - '0';
  while (1) {
    ch = getchar();
    if (ch < '0' || ch > '9') break;
    x = x * 10 + ch - '0';
  }
  return x * f;
}
const int maxn = 200100;
const int inf = 1061109567;
int n, m, tot, size, a[maxn], sum[maxn], last[maxn];
int low[maxn], f[maxn], pre[maxn], b[maxn], list[maxn];
void insert(int id, int val) {
  int l = 1, r = size;
  while (l <= r) {
    int mid = (l + r) >> 1;
    if (val > low[mid])
      l = mid + 1;
    else
      r = mid - 1;
  }
  size = max(size, l);
  f[id] = l;
  low[l] = val;
  last[l] = id, pre[id] = last[l - 1];
}
int find_l(int size, int val) {
  int l = 1, r = size, mid = 0;
  while (l < r) {
    mid = (l + r) >> 1;
    if (b[mid] >= val)
      r = mid;
    else
      l = mid + 1;
  }
  return l;
}
int find_r(int size, int val) {
  int l = 1, r = size, m = 0;
  while (l < r) {
    int mid = ((l + r) >> 1) + 1;
    if (b[mid] <= val)
      l = mid;
    else
      r = mid - 1;
  }
  return l;
}
int main() {
  n = read();
  for (int i = 2; i <= n + 1; i++) a[i] = read();
  a[1] = 0;
  a[n + 2] = inf;
  n += 2;
  for (int i = 1; i <= n; i++) {
    sum[i] = sum[i - 1];
    if (a[i] < 0) sum[i]++;
  }
  m = read();
  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;
  for (int i = 1; i <= n; i++)
    if (a[i] >= 0)
      insert(i, a[i]);
    else {
      pre[i] = f[i] = -1;
      for (int j = m, k = size; j >= 1; j--) {
        while (low[k] >= b[j]) k--;
        size = max(size, k + 1);
        low[k + 1] = b[j];
        last[k + 1] = -1;
      }
    }
  for (int i = n, r, l, rest = m; i >= 1 && rest;) {
    if (a[i] != -1) {
      if (pre[i] >= 0) {
        i = pre[i];
        continue;
      }
      r = find_r(rest, a[i] - 1);
      for (int j = i - 1; j >= 1; j--)
        if (a[j] != -1 && a[j] < a[i]) {
          l = find_l(rest, a[j] + 1);
          if (f[i] - f[j] - 1 == min(sum[i] - sum[j], r - l + 1)) {
            for (int p = j, q = l; p <= i && q <= r; p++)
              if (a[p] == -1) a[p] = b[q], b[q++] = -1;
            i = j;
            rest = l - 1;
            break;
          }
        }
    }
  }
  for (int i = 2, j = 1; i < n; i++)
    if (a[i] == -1) {
      while (b[j] == -1) j++;
      a[i] = b[j++];
    }
  for (int i = 2; i < n; i++) printf("%d ", a[i]);
  printf("\n");
  return 0;
}
