#include <bits/stdc++.h>
#define int long long

#define fi first
#define se second
#define endl '\n'
#define lb long double

#define vi std::vector<int>
#define isz(v) (int) v.size()
#define pii std::pair<int, int>
#define all(v) v.begin(), v.end()
#define vii vector<pair<int, int>>

#define loop cerr << "here" << endl;
#define TIME 1.0 * clock() / CLOCKS_PER_SEC

using namespace std;
typedef long long ll;

const int MAXN = 1e6 + 7;
const int inf32 = 1e15;

template <typename T> void maximize(T &a, T b){if(a < b) a = b;}
template <typename T> void minimize(T &a, T b){if(a > b) a = b;}

int pre[MAXN], nxt[MAXN], n, t;
string s;
vii seg[MAXN];


signed main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    #define task "t"
    if (fopen(task".inp", "r")){
        freopen(task".inp", "r", stdin);
        freopen(task".out", "w", stdout);
    }

    cin >> t;


    while(t--){
        for(int i = 1; i <= 2 * n; i++){
            pre[i] = nxt[i] = 0;
            seg[i].clear();
        }
        cin >> n >> s;
        s = ' ' + s;
        int openCnt = 0;

        for(int i = 1; i <= n; i++){
            int L, R;
            cin >> L >> R;

            if(s[L] == '(' and s[L] == s[R]){
                openCnt++;
                pre[L]++;
            }

            if(s[L] == ')' and s[R] == s[L]){
                pre[R]--;
            }

            if(s[L] == '(' and s[R] == ')'){
                pre[R]--;
                seg[L].push_back({L, R});
            }

            if(s[L] == ')' and s[R] == '('){
                pre[L]--;
                seg[L].push_back({L, R});
            }

        }
        if(n & 1){
            cout << "No" << endl;
            continue;
        }

        int cnt = 0;
        priority_queue<pii, vii, greater<pii>> pq;
        bool check = 1;

        for(int i = 1; i <= 2 * n; i++){
            cnt += pre[i] + nxt[i];
            for(auto x : seg[i]){pq.push({x.se, x.fi});} //ưu tiên R trái nhất trc

            if(cnt < 0){
                while(cnt < 0 and isz(pq)){
                    int L = pq.top().se, R = pq.top().fi;
                    pq.pop();
                    if(L <= i) cnt++;
                    else nxt[L]++;
                    if(R <= i) cnt++;
                    else nxt[R]++;
                }
            }
            if(cnt < 0){
                check = 0;
                break;
            }
        }

        if(!check){
            cout << "No" << endl;
            continue;
        }

        cout << (!cnt and check ? "Yes" : "No") << endl;
    }

}
