OI XXXII - spr

// https://szkopul.edu.pl/problemset/problem/aKBekEIo5lK0oSLz2UF4F_d9/site/?key=statement

#include <bits/stdc++.h>

using namespace std;

#define int long long

constexpr int sizik = 1000 * 1001, INF = INT64_MAX;

#define ar std::array
#define pr std::pair
#define vec std::vector

// #define GARY_DBG

typedef vec<vec<int>> _kra;
typedef ar<int, 3> Trio;

std::vector<Trio> v;
int n;

int ans[sizik];
int a[sizik], b[sizik];

bool check(int SaA, int SaB, int SbA, int SbB, int MaB, int MbA) {
    return ((SaA >= SaB - MaB) && (SbB >= SbA - MbA));
}

void print_ans() {
    for (int i = 1; i <= n; i++) {
        std::cout << ans[i] << " ";
    }
    std::cout << '\n';
}

void solve_brut1() {
    for (int z = 0; z < (1 << n); z++) {
        int SaA = 0, SaB = 0, SbA = 0, SbB = 0, MaB = INF, MbA = INF;
        for (int i = 0; i < n; i++) {
            ans[i + 1] = !!(z & (1 << i));
            if (ans[i + 1] == 0) {
                SaA += v[i][0];
                SbA += v[i][1];
                MbA = std::min(MbA, v[i][1]);
            } else {
                SaB += v[i][0];
                SbB += v[i][1];
                MaB = std::min(MaB, v[i][0]);
            }
        }

        if (MbA == INF) MbA = 0;
        if (MaB == INF) MaB = 0;

        if (check(SaA, SaB, SbA, SbB, MaB, MbA)) {
            print_ans();
            return;
        }
    }
}

std::vector<int> solve_podz1() {
    std::vector<std::pair<int, int>> v(n);
    for (int i = 0; i < n; i++) {
        v[i] = {b[i + 1], i};
    }

    std::vector<int> ans;
    ans.resize(n);

    std::sort(v.begin(), v.end(), std::greater<std::pair<int, int>>());
    int S1 = 0, S2 = 0;
    for (int i = 0; i < n; i++) {
        if (S1 <= S2) {
            S1 += v[i].first;
            ans[v[i].second] = 1;
        } else {
            S2 += v[i].first;
            ans[v[i].second] = 0;
        }
    }
    return ans;
}

void solve() {
    std::cin >> n;

    for (int i = 1; i <= n; i++) {
        std::cin >> a[i];
    }
    for (int i = 1; i <= n; i++) {
        std::cin >> b[i];

        v.push_back({a[i], b[i], i});
    }

    if (n == 2) {
        std::cout << "0 1\n";
        return;
    }

    if (n <= 20) {
        solve_brut1();
    } else {
        auto res = solve_podz1();

        int S1 = 0, S2 = 0;
        for (int i = 0; i < n; i++) {
            if (res[i] == 0) {
                S1 += a[i + 1];
            } else {
                S2 += a[i + 1];
            }
        }

        if (S2 > S1) {
            for (int i = 0; i < n; i++) {
                if (res[i] == 0) {
                    res[i] = 1;
                } else {
                    res[i] = 0;
                }
            }
        }

        for (const auto& a1 : res) {
            std::cout << a1 << " ";
        }
        std::cout << '\n';
    }
}

int32_t main() {
    std::ios_base::sync_with_stdio(0);
    std::cin.tie(0);
    std::cout.tie(0);

    int t = 1;
    // std::cin >> t;

    for (; t > 0; t--) {
        solve();
    }

    return 0;
}