#include <bits/stdc++.h>
using namespace std;
const int N = 5e5;
pair<int, int> pre[N];
int emp[N], w[N], vis[N], f[N], g[N], pos[N], b[N], m, n;
map<int, int> mp;
void dfs(int pos, int x, int len) {
  if (!pos) return;
  if (!emp[pos]) {
    dfs(pre[pos].first, pre[pos].second, len - 1);
    return;
  }
  int t = mp[x];
  ++mp[x];
  w[pos] = x, vis[t] = 1;
  emp[pos] = 0;
  for (int i = pos - 1; i >= 0; i--)
    if (!emp[i] && f[i] == len - 1 && w[i] < w[pos]) {
      dfs(i, w[i], len - 1);
      return;
    }
  for (int i = pos - 1; i >= 1; i--)
    if (emp[i]) {
      for (int j = t + 1; j <= m; j++)
        if (b[j] < x) {
          dfs(i, b[j], len - 1);
          return;
        }
    }
}
int cmp(const int &a, const int &b) { return a > b; }
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) scanf("%d", w + i), emp[i] = w[i] == -1;
  scanf("%d", &m);
  for (int i = 1; i <= m; i++) scanf("%d", b + i);
  sort(b + 1, b + m + 1, cmp);
  for (int i = 1; i <= m; i++)
    if (b[i] != b[i - 1]) mp[b[i]] = i;
  int len = 0;
  for (int i = 1; i <= n; i++) {
    if (!emp[i]) {
      if (w[i] > g[len]) {
        ++len;
        g[len] = w[i];
        pos[len] = i;
        pre[i] = make_pair(pos[len - 1], g[len - 1]);
        f[i] = len;
        continue;
      }
      int x = lower_bound(g + 1, g + len + 1, w[i]) - g;
      f[i] = x;
      pre[i] = make_pair(pos[x - 1], g[x - 1]);
      if (w[i] < g[x]) {
        g[x] = w[i];
        pos[x] = i;
      }
      continue;
    }
    int j = 1, p = len;
    if (b[1] > g[len]) {
      ++len, ++p;
      g[len] = b[1];
      pos[len] = i;
      ++j;
    } else {
      while (g[p - 1] >= b[1]) --p;
      if (b[1] < g[p]) {
        g[p] = b[1];
        pos[p] = i;
      }
    }
    f[i] = p;
    for (j = 2; j <= m; j++) {
      while (g[p - 1] >= b[j]) --p;
      if (b[j] < g[p]) {
        g[p] = b[j];
        pos[p] = i;
      }
    }
  }
  dfs(pos[len], g[len], len);
  for (int i = 1, j = 1; i <= n; i++) {
    if (!emp[i]) continue;
    while (j <= m && vis[j]) ++j;
    w[i] = b[j];
    vis[j] = 1;
  }
  for (int i = 1; i <= n; i++) printf("%d ", w[i]);
}
