← Home
#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;
}