#include <bits/stdc++.h>
using namespace std;
long long n, m, a[100001], b[100001], res, ps, f[100001], ans;
int length, nw[5000001], pv[5000001], u[5000001], v[5000001];
bool vis[100001];
int read() {
  char c = 0;
  int sum = 0, f = 1;
  while ((c < '0' || c > '9') && c != '-') c = getchar();
  if (c == '-') f = -1, c = getchar();
  while ('0' <= c && c <= '9') sum = sum * 10 + c - '0', c = getchar();
  return sum * f;
}
int main() {
  long long first, last, mid;
  n = read();
  for (int i = 1; i <= n; ++i) a[i] = read(), f[i] = 1e9;
  m = read();
  for (int i = 1; i <= m; ++i) b[i] = read();
  sort(b + 1, b + m + 1);
  for (int i = 1; i <= n; ++i) {
    if (a[i] != -1) {
      first = 0, last = n, ans = 1e9;
      while (first <= last) {
        mid = (first + last) / 2;
        if (f[mid] >= a[i])
          ans = min(ans, mid), last = mid - 1;
        else
          first = mid + 1;
      }
      if (ans != 1e9)
        f[ans] = a[i], nw[ans] = ++length, pv[length] = nw[ans - 1];
    } else {
      res = 1e9, ps = m + 1;
      for (int j = n; j >= 1; --j) {
        while (ps > 1 && b[ps - 1] > f[j - 1]) ps--, res = ps;
        if (res != 1e9 && b[res] < f[j])
          f[j] = b[res], nw[j] = ++length, pv[length] = nw[j - 1],
          u[length] = i, v[length] = res, res = 1e9;
      }
    }
  }
  int t;
  for (int i = n; i >= 1; --i)
    if (f[i] != 1e9) {
      t = nw[i];
      while (t) {
        while (v[t] != 0 && vis[v[t]]) v[t]++;
        a[u[t]] = b[v[t]], vis[v[t]] = 1;
        t = pv[t];
      }
      ps = 1;
      for (int j = 1; j <= n; ++j)
        if (a[j] == -1) {
          while (vis[ps]) ps++;
          a[j] = b[ps], vis[ps] = 1;
        }
      for (int j = 1; j <= n; ++j) printf("%d ", a[j]);
      puts("");
      return 0;
    }
  return 0;
}
