#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
int val[N], alt[N];
int f[N], pos[N], dp[N], las[N], book[N];
int main() {
  int n, m, i, j, mx = 0;
  scanf("%d", &n);
  for (i = 1; i <= n; i++) scanf("%d", &val[i]);
  val[++n] = 1e9 + 7;
  scanf("%d", &m);
  for (i = 1; i <= m; i++) scanf("%d", &alt[i]);
  sort(alt + 1, alt + m + 1);
  for (i = 1; i <= n; i++) {
    if (~val[i]) {
      int tp = lower_bound(f + 1, f + mx + 1, val[i]) - f - 1;
      f[tp + 1] = val[i], pos[tp + 1] = i;
      dp[i] = tp + 1, las[i] = pos[tp];
      mx = max(mx, tp + 1);
    } else {
      int tp = mx;
      for (j = m; j >= 1; j--) {
        while (tp > 0 && f[tp] >= alt[j]) tp--;
        f[tp + 1] = alt[j], pos[tp + 1] = i;
      }
      if (f[mx + 1]) mx++;
    }
  }
  int now = n, tp = dp[n], tv = 1e9 + 7;
  while (tp) {
    int nxt = 0;
    if (!~val[now]) {
      val[now] = tv;
      for (i = now - 1; i > 0; i--)
        if (~val[i] && val[i] < tv && dp[i] == tp - 1) {
          nxt = i;
          break;
        }
      if (nxt)
        tv = val[nxt];
      else {
        for (i = now - 1; i > 0; i--)
          if (!~val[i]) {
            nxt = i;
            break;
          }
      }
    } else
      nxt = las[now];
    if (nxt && val[nxt] == -1) {
      for (i = m; i > 0; i--)
        if (!book[i] && alt[i] < tv) {
          book[i] = 1, tv = alt[i];
          break;
        }
    } else
      tv = val[nxt];
    tp--, now = nxt;
  }
  tp = 1;
  for (i = 1; i < n; i++) {
    if (!~val[i]) {
      while (tp <= m && book[tp]) tp++;
      val[i] = alt[tp], book[tp] = 1;
    }
    printf("%d ", val[i]);
  }
  return 0;
}
