////!multi
//void add(vl &a, ll x){
//    for(ll y : a)
//        if ((x^y) < x)
//            x ^= y;
//    for(ll &y : a)
//        if((x^y) < y)
//            y ^= x;
//    if(x)
//        a.pb(x);
//}
//bool can_make(vl a, ll x){
//    for(ll y : a)
//        if((x^y) < x)
//            x ^= y;
//    return x == 0;
//}
//bool dominates(vl a, vl b){
//    for(ll x : b)
//        if(!can_make(a,x))
//            return false;
//    return true;
//}
//void __(){
//    _(int,n);
//    _(vl,a,n);
//    _(string,s);
//    vl one,zero;
//    per(i,n){
//        if(s[i] == '0')
//            add(zero,a[i]);
//        else
//            add(one,a[i]);
//        if(!dominates(zero,one)){
//            print 1;
//            return;
//        }
//    }
//    print 0;
//}
#include <iomanip>
#include <vector>
#include <utility>
#include <iostream>
#include <string>
#define pb push_back
#define PER_ZERO_INT(i,r) for(int i = (r)-1; i >= 0; --i)
#define GET_PER_MACRO(_1,_2,_3,_4,NAME,...) NAME
#define per(...) GET_PER_MACRO(__VA_ARGS__,PER_ANY,PER_INT,PER_ZERO_INT)(__VA_ARGS__)
#define all(v) (v).begin(), (v).end()
#define sz(v) ll(v.size())
#define T1 template<typename T> static
using namespace std;
typedef long long ll;
typedef vector<ll> vl;
T1 ostream& operator<<(ostream& stream, const vector<T>& t);
T1 istream& read(T, T, istream& = cin);
T1 istream& operator>>(istream& stream, vector<T>& t){
    return read(all(t), stream);
}
T1 istream& read(T b, T e, istream& stream){
    for(T it = b; it != e; ++it)
        stream >> *it;
    return stream;
}
struct _print {
    string sep,end;
    bool space;
    ostream &stream;
    _print(string _sep=" ",string _end="\n",
            ostream &_stream = cout) 
        : sep(_sep),end(_end),space(false),
            stream(_stream) {}
    ~_print() { stream << end; }

    template <typename T>
        _print &operator , (const T &t) {
            if (space) stream << sep;
            space = true;
            stream << t;
            return *this;
        }
};
#define print _print(),
#define INPUT_WITHOUT_INIT(type,name) type name; cin >> name
#define _IWI(type,name,...) type name(__VA_ARGS__); cin >> name
#define GET_INPUT_MACRO(_1,_2,_3,_4,_5,_6,_7,_8,NAME,...) NAME
#define _(...) GET_INPUT_MACRO(__VA_ARGS__,_IWI,_IWI,_IWI,_IWI,_IWI,_IWI,INPUT_WITHOUT_INIT)(__VA_ARGS__)
//!multi
void add(vl &a, ll x){
    for(ll y : a)
        if ((x^y) < x)
            x ^= y;
    for(ll &y : a)
        if((x^y) < y)
            y ^= x;
    if(x)
        a.pb(x);
}
bool can_make(vl a, ll x){
    for(ll y : a)
        if((x^y) < x)
            x ^= y;
    return x == 0;
}
bool dominates(vl a, vl b){
    for(ll x : b)
        if(!can_make(a,x))
            return false;
    return true;
}
void __(){
    _(int,n);
    _(vl,a,n);
    _(string,s);
    vl one,zero;
    per(i,n){
        if(s[i] == '0')
            add(zero,a[i]);
        else
            add(one,a[i]);
        if(!dominates(zero,one)){
            print 1;
            return;
        }
    }
    print 0;
}
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout << fixed << setprecision(15);
    int t;
    cin >> t;
    for(int i = 1; i <= t; ++i){
        __();
    }
}



Measured memory_bytes: 3624