#include <bits/stdc++.h>
#pragma GCC optimize("Ofast,unroll-loops")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4.2")
using namespace std;
inline void opting() {
  ios_base::sync_with_stdio(false);
  cout.tie(0);
  cin.tie(0);
}
int inp() {
  int x;
  cin >> x;
  return x;
}
void make_unique(vector<int> &vec, bool sorted = false) {
  if (!sorted) sort((vec).begin(), (vec).end());
  vec.resize(unique((vec).begin(), (vec).end()) - vec.begin());
}
void file_edit(bool reader = true, bool writer = false) {
  if (reader) freopen("Test_input.txt", "r", stdin);
  if (writer) freopen("Test_output.txt", "w", stdout);
}
const int SQRT = 350 + 10, lg = 18 + 2, inlim = 2147483647;
const int maxn = 2e5 + 20, delta = 1e9 + 7, inf = 1e9 + 420;
int n, a[maxn], m, b[maxn];
int st[maxn], tp, p[maxn], from[maxn];
bool usea[maxn], useb[maxn];
int main() {
  opting();
  cin >> n;
  for (int i = 1; i <= n; i++) cin >> a[i];
  a[n + 1] = inf;
  cin >> m;
  for (int i = 1; i <= m; i++) cin >> b[i];
  sort(b + 1, b + 1 + m);
  for (int i = 1; i <= n + 1; ++i) {
    if (a[i] != -1) {
      if (a[i] > st[tp])
        st[++tp] = a[i], p[tp] = i, from[i] = p[tp - 1];
      else {
        int x = lower_bound(st + 1, st + 1 + tp, a[i]) - st;
        p[x] = i, st[x] = a[i], from[i] = p[x - 1];
      }
    } else {
      if (b[m] > st[tp]) {
        st[++tp] = b[m];
        p[tp] = p[tp - 1];
      }
      int last = m;
      for (int j = tp; j; --j) {
        while (b[last - 1] > st[j - 1]) last--;
        if (st[j] >= b[last]) {
          st[j] = b[last];
          p[j] = p[j - 1];
        }
      }
    }
  }
  int x = p[tp];
  while (x) {
    usea[x] = 1;
    x = from[x];
  }
  int cnt = 0, last = 1, lw = 0;
  queue<int> q;
  for (int i = 1; i <= n + 1; i++)
    if (usea[i]) {
      while (last < m and b[last] <= lw) ++last;
      while (!q.empty() and b[last] > lw and b[last] < a[i]) {
        useb[last] = 1;
        a[q.front()] = lw = b[last];
        q.pop();
        while (last < m and b[last] <= lw) last++;
      }
      while (!q.empty()) q.pop();
      lw = a[i];
    } else if (a[i] == -1)
      q.push(i);
  last = 1;
  for (int i = 1; i <= n; i++)
    if (a[i] == -1) {
      while (useb[last]) last++;
      a[i] = b[last];
      last++;
    }
  for (int i = 1; i <= n; ++i) cout << a[i] << ' ';
}
