#include <bits/stdc++.h>
const int maxn = 100010, inf = 1e9;
using namespace std;
int n, m, a[maxn], b[maxn], low[maxn], pre[maxn], f[maxn], last[maxn],
    gap[maxn];
void work() {
  memset(low, 63, sizeof(low));
  pre[1] = 0, f[1] = 1, last[1] = 1, low[1] = 0;
  for (int k = 2; k <= n; k++) {
    if (a[k] != -1) {
      int l = 1, r = n, mid = (l + r) >> 1;
      while (l <= r) {
        if (low[mid] < a[k])
          l = mid + 1;
        else
          r = mid - 1;
        mid = (l + r) >> 1;
      }
      pre[k] = last[l - 1], last[l] = k;
      f[k] = l, low[l] = a[k];
    } else {
      pre[k] = -1, f[k] = -1;
      for (int i = m, j = n; i >= 1; i--) {
        while (low[j] >= b[i]) j--;
        low[j + 1] = b[i], last[j + 1] = -1;
      }
    }
  }
}
void print() {
  int l, r, rest = m;
  for (int x = n; x >= 1;)
    if (a[x] != -1) {
      if (pre[x] >= 0) {
        x = pre[x];
        continue;
      }
      r = lower_bound(b + 1, b + 1 + rest, a[x]) - b - 1;
      for (int y = x - 1; y; y--)
        if (a[y] != -1 && a[y] < a[x]) {
          l = upper_bound(b + 1, b + 1 + rest, 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, rest = l - 1;
            break;
          }
        }
    }
  for (int i = 1, j = 1; i <= n; i++) {
    if (a[i] == -1) {
      for (; b[j] == -1; j++)
        ;
      a[i] = b[j], b[j++] = -1;
    }
  }
  for (int i = 2; i < n; i++) printf("%d ", a[i]);
  puts("");
}
int main() {
  scanf("%d", &n), gap[1] = gap[0] = 0;
  for (int i = 2; i <= n + 1; i++)
    scanf("%d", &a[i]), gap[i] = gap[i - 1] + (a[i] == -1);
  a[1] = 0, a[n + 2] = inf, gap[n + 2] = gap[n + 1], n += 2;
  scanf("%d", &m);
  for (int i = 1; i <= m; i++) scanf("%d", &b[i]);
  sort(b + 1, b + 1 + m), m = unique(b + 1, b + 1 + m) - b - 1;
  work(), print();
  return 0;
}
