#include <bits/stdc++.h>
using namespace std;
const int N = 100000;
int a[N + 1], b[N], pre[N];
int main() {
  int n, m;
  scanf("%i", &n);
  for (int i = 0; i < n; i++) {
    scanf("%i", a + i);
  }
  scanf("%i", &m);
  for (int i = 0; i < m; i++) {
    scanf("%i", b + i);
  }
  sort(b, b + m);
  vector<pair<int, int>> low(n + 1, make_pair(INT_MAX, -1));
  low[0] = make_pair(INT_MIN, -1);
  for (int i = 0; i < n; i++) {
    if (~a[i]) {
      int k = lower_bound(low.begin(), low.end(), make_pair(a[i], -1)) -
              low.begin();
      pre[i] = low[k - 1].second;
      low[k] = make_pair(a[i], i);
    } else {
      for (int j = m - 1, k = n; ~j; j--) {
        while (low[k].first >= b[j]) {
          k--;
        }
        low[k + 1] = make_pair(b[j], low[k].second);
      }
    }
  }
  int n1 = n;
  while (low[n1].first == INT_MAX) {
    n1--;
  }
  vector<int> index;
  for (int i = low[n1].second; ~i; i = pre[i]) {
    index.push_back(i);
  }
  sort(index.begin(), index.end());
  index.push_back(n);
  a[n] = INT_MAX;
  vector<int> id;
  for (int i = 0; i < m; i++) {
    if (!i || b[id.back()] != b[i]) {
      id.push_back(i);
    }
  }
  vector<bool> used(m);
  for (int i = 0, pid = 0, pindex = 0; i < n; i++) {
    if (a[i] == -1) {
      if (pid < id.size() && b[id[pid]] < a[index[pindex]]) {
        a[i] = b[id[pid]];
        used[id[pid]] = true;
        pid++;
      }
    }
    if (index[pindex] == i) {
      while (pid < id.size() && b[id[pid]] <= a[index[pindex]]) {
        pid++;
      }
      pindex++;
    }
  }
  for (int i = n - 1, j = m - 1; ~i; i--) {
    while (~j && used[j]) j--;
    if (a[i] == -1) {
      a[i] = b[j--];
    }
  }
  for (int i = 0; i < n; i++) {
    printf("%d%c", a[i], " \n"[i == n - 1]);
  }
  return 0;
}
