#include using namespace std; using ull = uint64_t; using ll = int64_t; using vi = vector; using vll = vector; using vs = vector; using ld = long double; using P = pair; using G = vector>; #define LO(...) (void)0 #define debug(x) (void)0 #define reps(i,a,n) for(ll i##_len = (ll)(n), i = (a); i < i##_len; ++i) #define rep(i,n) reps(i,0,(n)) #define rrep(i,n) reps(i,1,(n)+1) #define repd(i,n) for(ll i=(n)-1;i>=0;i--) #define rrepd(i,n) for(ll i=(n);i>=1;i--) namespace std {template istream &operator>>(istream &is, pair &v){return is>>v.first>>v.second;}} templatevoid input(T& a){cin>>a;} templatevoid input(T& a,Ts&... b){cin>>a;input(b...);} #define inp(...) ll __VA_ARGS__;input(__VA_ARGS__) #define inps(...) string __VA_ARGS__;input(__VA_ARGS__) #define inpp(p) cin >> (p).first >> (p).second #define inpv(v,N) vll v(N);rep(i,N)cin>>v[i]; #define inpvs(v,N) vs v(N);rep(i,N)cin>>v[i]; #define all(v) begin(v),end(v) #define Yes cout<<"Yes\n" #define No cout<<"No\n" #define allok(i,N,pred) [&]()->bool{bool allok_=1;rep(i,N)if(!(pred))allok_=0;return allok_;}() #define anyok(i,N,pred) [&]()->bool{bool anyok_=0;rep(i,N)if(pred)anyok_=1;return anyok_;}() inline void YESNO(bool b){cout<<(b?"YES\n":"NO\n");}inline void yesno(bool b){cout<<(b?"yes\n":"no\n");}inline void YesNo(bool b){cout<<(b?"Yes\n":"No\n");} #define SP cout<<' ' #define ENDL cout<<'\n' #define setfp cout<string join(const C &v){ostringstream s;bool f=1;for(auto &&e:v){if(!f)s<<' ';f=0;s<string joinadd(const C &v){ostringstream s;bool f=1;for(auto &&e:v){if(!f)s<<' ';f=0;s<void prv_(const C &v){cout<void prvadd_(const C &v){cout<void prv(const C &v){prv_(v);ENDL;} templatevoid prvadd(const C &v){prvadd_(v);ENDL;} templateusing rr_void_t=void; templatestruct is_container:false_type{}; templatestruct is_container>:true_type{}; template::value && !is_same::value>> void pr_(const T& a){prv_(a);} template::value || is_same::value>,typename=void> void pr_(const T& a){cout<void pr(const T& a){pr_(a);cout<<'\n';} templatevoid pr(const T& a,const Ts&... b){pr_(a);cout<<' ';pr(b...);} templatevoid prs(const T& a){pr_(a);SP;} inline ll max(ll a, ll b){return max(a, b);} inline ll min(ll a, ll b){return min(a, b);} templatebool chmax(T &a,const T &b){return abool chmin(T &a,const T &b){return b>void so(T &a,C c=C{}){sort(begin(a),end(a),c);} template>void rso(T &a,C c=C{}){sort(rbegin(a),rend(a),c);} templatevoid rev(T &a){reverse(begin(a),end(a));} constexpr ll INF = 1e18; #ifndef ATCODER_FENWICKTREE_HPP #define ATCODER_FENWICKTREE_HPP 1 #include #include #ifndef ATCODER_INTERNAL_TYPE_TRAITS_HPP #define ATCODER_INTERNAL_TYPE_TRAITS_HPP 1 #include #include #include namespace atcoder { namespace internal { #ifndef _MSC_VER template using is_signed_int128 = typename std::conditional::value || std::is_same::value, std::true_type, std::false_type>::type; template using is_unsigned_int128 = typename std::conditional::value || std::is_same::value, std::true_type, std::false_type>::type; template using make_unsigned_int128 = typename std::conditional::value, __uint128_t, unsigned __int128>; template using is_integral = typename std::conditional::value || is_signed_int128::value || is_unsigned_int128::value, std::true_type, std::false_type>::type; template using is_signed_int = typename std::conditional<(is_integral::value && std::is_signed::value) || is_signed_int128::value, std::true_type, std::false_type>::type; template using is_unsigned_int = typename std::conditional<(is_integral::value && std::is_unsigned::value) || is_unsigned_int128::value, std::true_type, std::false_type>::type; template using to_unsigned = typename std::conditional< is_signed_int128::value, make_unsigned_int128, typename std::conditional::value, std::make_unsigned, std::common_type>::type>::type; #else template using is_integral = typename std::is_integral; template using is_signed_int = typename std::conditional::value && std::is_signed::value, std::true_type, std::false_type>::type; template using is_unsigned_int = typename std::conditional::value && std::is_unsigned::value, std::true_type, std::false_type>::type; template using to_unsigned = typename std::conditional::value, std::make_unsigned, std::common_type>::type; #endif template using is_signed_int_t = std::enable_if_t::value>; template using is_unsigned_int_t = std::enable_if_t::value>; template using to_unsigned_t = typename to_unsigned::type; } // namespace internal } // namespace atcoder #endif // ATCODER_INTERNAL_TYPE_TRAITS_HPP namespace atcoder { // Reference: https://en.wikipedia.org/wiki/Fenwick_tree template struct fenwick_tree { using U = internal::to_unsigned_t; public: fenwick_tree() : _n(0) {} explicit fenwick_tree(int n) : _n(n), data(n) {} void add(int p, T x) { assert(0 <= p && p < _n); p++; while (p <= _n) { data[p - 1] += U(x); p += p & -p; } } T sum(int l, int r) { assert(0 <= l && l <= r && r <= _n); return sum(r) - sum(l); } private: int _n; std::vector data; U sum(int r) { U s = 0; while (r > 0) { s += data[r - 1]; r -= r & -r; } return s; } }; } // namespace atcoder #endif // ATCODER_FENWICKTREE_HPP int main() { inp(T); while(T--){ inp(N); vll a(N); rep(i,N){ inps(X); a[i] = X=="True"; } inpvs(Y,N-1); atcoder::fenwick_tree fen(N-1); rep(i,N-1){ inp(s); s--; ll ok = 0; ll ng = N-1-i; while(abs(ng - ok) > 1){ ll mid = ok + (ng - ok) / 2; ll k = fen.sum(0, mid+1); bool isOk = mid - k <= s; if(isOk) ok = mid; else ng = mid; } ll ok1 = ok; ok = 0; ng = N-1-i; while(abs(ng - ok) > 1){ ll mid = ok + (ng - ok) / 2; ll k = fen.sum(0, mid+1); bool isOk = mid - k <= s+1; if(isOk) ok = mid; else ng = mid; } if(Y[ok1] == "and"){ a[ok1] = a[ok1] & a[ok]; }else if(Y[ok1] == "or"){ a[ok1] = a[ok1] | a[ok]; }else if(Y[ok1] == "xor"){ a[ok1] = a[ok1] ^ a[ok]; }else if(Y[ok1] == "imp"){ if(a[ok1]){ a[ok1] = a[ok]; }else{ a[ok1] = 1; } } fen.add(ok, 1); } pr(a[0] ? "True" : "False"); } }