#include <bits/stdc++.h>
using namespace std;
template <class T>
void Read(T& x) {
  x = 0;
  int flag = 0, sgn = 1;
  char c;
  while (c = getchar()) {
    if (c == '-')
      sgn = -1;
    else if (c >= '0' && c <= '9')
      x *= 10, x += c - '0', flag = 1;
    else if (flag)
      break;
  }
  x *= sgn;
}
const int MAXN = 1e5 + 10;
vector<int> pare, rest;
int a[MAXN], n, m, c[MAXN], cidx[MAXN], len[MAXN], preidx[MAXN], ans = 0,
                                                                 gaps[MAXN];
void init() {
  c[0] = 0;
  memset(cidx, -1, sizeof(cidx));
  for (int i = 1; i <= n; i++) c[i] = 0x3f3f3f3f + 1000000;
  for (int i = 0; i < n; i++) {
    if (a[i] != -1) {
      int k = lower_bound(c + 1, c + n + 1, a[i]) - c;
      len[i] = k;
      c[k] = a[i];
      cidx[k] = i;
      preidx[i] = cidx[k - 1];
      ans = max(ans, k);
    } else {
      int p = pare.size() - 1, q = n;
      while (p >= 0 && q >= 1) {
        while (c[q] >= pare[p]) q--;
        q++;
        c[q] = pare[p];
        cidx[q] = -1;
        p--;
      }
    }
  }
}
bool vis[MAXN];
void solve() {
  int st = cidx[ans];
  while (st) {
    if (preidx[st] != -1) {
      st = preidx[st];
      continue;
    }
    for (int l = st - 1; l >= 0; l--) {
      int need = len[st] - len[l] - 1;
      if (a[l] >= a[st] || a[l] == -1) continue;
      if (need > gaps[st] - (l == 0 ? 0 : gaps[l - 1])) continue;
      int L = upper_bound(pare.begin(), pare.end(), a[l]) - pare.begin(),
          R = lower_bound(pare.begin(), pare.end(), a[st]) - pare.begin() - 1;
      if (R - L + 1 < need) continue;
      int cnt = 0;
      for (int i = st, cnt = 0; i >= l, cnt < need; i--) {
        if (a[i] != -1) continue;
        cnt++;
        vis[R] = 1;
        a[i] = pare[R--];
      }
      st = l;
      break;
    }
  }
  for (int i = 0; i < pare.size(); i++)
    if (!vis[i]) rest.push_back(pare[i]);
  for (int i = 0; i < n; i++)
    if (a[i] == -1) {
      a[i] = rest.back();
      rest.pop_back();
    }
  for (int i = 1; i < n - 1; i++) printf("%d ", a[i]);
}
int main() {
  Read(n);
  for (int i = 1; i <= n; i++) {
    Read(a[i]);
    gaps[i] = gaps[i - 1] + (a[i] == -1);
  }
  gaps[n + 1] = gaps[n];
  n += 2;
  a[0] = -0x3f3f3f3f, a[n - 1] = 0x3f3f3f3f;
  Read(m);
  for (int i = 1; i <= m; i++) {
    int v;
    Read(v);
    pare.push_back(v);
  }
  sort(pare.begin(), pare.end());
  vector<int> lover(pare);
  pare.erase(unique(pare.begin(), pare.end()), pare.end());
  for (int i = 0; i < pare.size(); i++) {
    int k = lower_bound(lover.begin(), lover.end(), pare[i]) - lover.begin();
    for (int j = k + 1; lover[k] == lover[j]; j++) rest.push_back(lover[k]);
  }
  init();
  solve();
}
