#include <bits/stdc++.h>
using namespace std;
template<class T>
void rd(T& x) {
int f = 0, ch = 0; x = 0;
for (; !isdigit(ch); ch = getchar()) if (ch == '-') f = 1;
for (; isdigit(ch); ch = getchar()) x = (x<<1)+(x<<3)+(ch&15);
if (f) x = -x;
}
constexpr int N = 1e5+5, inf = 0x7f7f7f7f;
int b[N], m, vis[N], ans[N];
void get(int i, int k, int& x) {
int t = lower_bound(b + 1, b + 1 + m, k) - b - 1;
vis[t] = 1;
x = ans[i] = b[t];
}
int n, a[N], f[N], pos[N], g[N], p[N];
int main() {
rd(n);
for (int i = 1; i <= n; ++i) rd(a[i]), f[i] = inf;
n++; a[n] = inf; f[n] = inf; rd(m);
for (int i = 1; i <= m; ++i) rd(b[i]);
sort(b + 1, b + 1 + m);
for (int i = 1; i <= n; ++i) {
if (a[i] == -1) {
for (int j = n, k = m; k > 0; k--) {
while (f[j] >= b[k]) j--;
f[j+1] = b[k];
pos[j+1] = i;
}
} else {
int j = lower_bound(f + 1, f + 1 + n, a[i]) - f - 1;
g[i] = j + 1; p[i] = pos[j]; f[j+1] = a[i]; pos[j+1] = i;
}
}
{
int i = g[n], j = n, x = a[n];
while (i--) {
if (a[j] != -1) {
if (a[p[j]] == -1) get(p[j], a[j], x);
else x = a[p[j]];
j = p[j];
} else {
bool flag = 0;
for (int s = j-1; s > 0; s--) {
if (a[s] != -1 && g[s] == i && a[s] < x) {
x = a[j=s]; flag = 1;
break;
}
}
if (flag) continue;
for (int s = j-1; s > 0; s--) {
if (a[s] == -1) {
get(s, x, x); j = s;
break;
}
}
}
}
}
for (int i = 1, j = 1; i < n; ++i) {
if (a[i] == -1) {
if (ans[i] != 0) { a[i] = ans[i]; continue; }
while (vis[j]) j++;
vis[j] = 1;
a[i] = b[j];
}
}
for (int i = 1; i < n; ++i) printf("%d ", a[i]);
puts("");
return 0;
}