#include<unordered_map>
#include<unordered_set>
#include<functional>
#include<algorithm>
#include<iostream>
#include<hash_map>
#include<iterator>
#include<iomanip>
#include<numeric>
#include<cstring>
#include<vector>
#include<bitset>
#include<string>
#include<deque>
#include<stack>
#include<queue>
#include<array>
#include<cmath>
#include<list>
#include<map>
#include<set>

#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>

using namespace __gnu_pbds;
using namespace std;

typedef long long ll;
typedef unsigned long long ull;
typedef double db;
typedef long double ldb;

#define ordered_set tree<ll, null_type,less_equal<ll>, \
rb_tree_tag,tree_order_statistics_node_update>
#define pii pair<int,int>
#define pll pair<ll,ll>
#define inf INT32_MAX
#define linf INT64_MAX
#define pf push_front
#define pb push_back
#define ppb pop_back
#define ppf pop_front
#define ff first
#define ss second

ll fastPow(ll n, ll k/*,ll m*/) {
    if (k == 0)return 1;

    ll res = fastPow(n, k / 2/*,m*/)/*%m*/;

    res = (res * res)/*%m*/;

    if (k & 1)res = (res * n)/*%m*/;

    return res/*%m*/;
}

ll fastPow(ll n, ll k, ll m) {
    if (k == 0)return 1;

    ll res = fastPow(n, k / 2, m) % m;

    res = (res * res) % m;

    if (k & 1)res = (res * n) % m;

    return res % m;
}

ll calcMod(ll a, ll m) {
    return (a % m + m) % m;
}

ll Ceil(ll n, ll m) {
    return (n + m - 1) / m;
}

const ll mod = 1e9 + 7;

bool solve() {
    int n;
    cin >> n;
    vector<pii > v(n), a(n), b(n);
    for (int i = 0; i < n; ++i) {
        cin >> v[i].ff;
        a[i] = {v[i].ff, i};
    }
    for (int i = 0; i < n; ++i) {
        cin >> v[i].ss;
        b[i] = {v[i].ss, i};
    }
    sort(a.begin(), a.end());
    sort(b.begin(), b.end());

    string ans(n, '0');
    int startA;
    for (int i = n - 1; i >= 0; --i) {
        if (v[a[i].ss].ss >= v[a[n - 1].ss].ss) {
            startA = i;
        }
    }
    for (int i = startA; i < n; ++i) {
        ans[a[i].ss] = '1';
    }

    int startB;
    for (int i = n - 1; i >= 0; --i) {
        if (v[b[i].ss].ff >= v[b[n - 1].ss].ff) {
            startB = i;
        }
    }
    for (int i = startB; i < n; ++i) {
        ans[b[i].ss] = '1';
    }

    cout << ans << "\n";
    return 1;
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);

    int t = 1;
    cin >> t;
    while (t--) {
        solve();
    }
    return 0;
}
