#include <bits/stdc++.h>
namespace modular {
const int MOD = 1000000007;
inline int add(int x, int y) { return (x += y) >= MOD ? x -= MOD : x; }
inline void inc(int &x, int y) { (x += y) >= MOD ? x -= MOD : 0; }
inline int mul(int x, int y) { return 1LL * x * y % MOD; }
inline int qpow(int x, int y) {
  int ans = 1;
  for (; y; y >>= 1, x = mul(x, x))
    if (y & 1) ans = mul(ans, x);
  return ans;
}
};  // namespace modular
namespace Base {
template <typename Tp>
inline Tp input() {
  Tp x = 0, y = 1;
  char c = getchar();
  while ((c < '0' || '9' < c) && c != EOF) {
    if (c == '-') y = -1;
    c = getchar();
  }
  if (c == EOF) return 0;
  while ('0' <= c && c <= '9') x = x * 10 + c - '0', c = getchar();
  return x *= y;
}
template <typename Tp>
inline void read(Tp &x) {
  x = input<Tp>();
}
template <typename Tp>
inline void chmax(Tp &x, Tp y) {
  x < y ? x = y : 0;
}
template <typename Tp>
inline void chmin(Tp &x, Tp y) {
  x > y ? x = y : 0;
}
};  // namespace Base
using namespace Base;
int N, M;
int a[200007], b[200007], ans[200007];
int len[200007], pre[200007], f[200007], pos[200007];
bool vis[200007];
int calc(int x) {
  int y = std::lower_bound(b + 1, b + M + 1, x) - b - 1;
  vis[y] = true;
  return b[y];
}
void solve() {
  for (int i = 1; i <= N; ++i) f[i] = 1e9;
  for (int i = 1; i <= N; ++i) {
    if (~a[i]) {
      int j = std::lower_bound(f + 1, f + N + 1, a[i]) - f - 1;
      len[i] = j + 1, pre[i] = pos[j], f[j + 1] = a[i], pos[j + 1] = i;
    } else {
      for (int j = N, k = M; k; --k) {
        while (f[j] >= b[k]) j--;
        f[j + 1] = b[k], pos[j + 1] = i;
      }
    }
  }
  int i = len[N], j = N, x = a[N];
  while (i--) {
    if (~a[j]) {
      if (~a[pre[j]])
        x = a[pre[j]];
      else
        x = ans[pre[j]] = calc(a[j]);
      j = pre[j];
    } else {
      bool tmp = false;
      for (int k = j - 1; k >= 1; --k)
        if (~a[k] && a[k] < x && len[k] == i) {
          x = a[j = k];
          tmp = true;
        }
      if (tmp) continue;
      for (int k = j - 1; k >= 1; --k)
        if (!~a[k]) {
          ans[k] = x = calc(x);
          j = k;
          break;
        }
    }
  }
  j = 1;
  for (int i = 1; i <= N; ++i)
    if (!~a[i]) {
      if (ans[i]) continue;
      while (vis[j]) j++;
      ans[i] = b[j++];
    } else
      ans[i] = a[i];
  for (int i = 1; i < N; ++i) printf("%d ", ans[i]);
  puts("");
}
int main() {
  read(N);
  for (int i = 1; i <= N; ++i) read(a[i]);
  read(M);
  for (int i = 1; i <= M; ++i) read(b[i]);
  std::sort(b + 1, b + M + 1);
  a[++N] = 1e9;
  solve();
  return 0;
}
