#pragma GCC optimize("Ofast,unroll-loops")
#pragma GCC target("avx,avx2,fma")
#include <bits/stdc++.h>

#define all(x) begin(x), end(x)
#define isz(x) int(size(x))
#define forx(x, n) for(int x = 0; x < n; ++x)
using std::cin;
using std::cout;
using std::vector;
using ll = long long;
using uint = unsigned int;
using pii = std::pair<int, int>;
using pll = std::pair<ll, ll>;
using vi = vector<int>;
using vvi = vector<vi>;
using vpii = vector<pii>;

const auto ready = []()
{
	cin.tie(0);
	std::ios_base::sync_with_stdio(false);
	return true;
}();

bool check(std::string s)
{
    bool ok = true;
    int balance = 0;
    forx(i, s.size())
    {
        if(s[i] == '(') ++balance;
        else --balance;
        if(balance < 0) ok = false;
    }
    return ok && !balance;
}

int main()
{
    int t; cin >> t;
    while(t--)
    {
        int n; cin >> n;
        std::string s; cin >> s;
        int cnt = 0;
        forx(i, s.size()) if(s[i] == '0') ++cnt;
        if(cnt & 1)
        {
            cout << "No" << "\n";
            continue;
        }
        bool last = 1;
        int op = (n - cnt) / 2;
        std::string a, b;
        forx(i, s.size())
        {
            if(s[i] == '1')
            {
                if(op > 0) a.push_back('(');
                else a.push_back(')');
                --op;
            }
            else
            {
                if(last) a.push_back('(');
                else a.push_back(')');
                last = !last;
            }
        }
        b = a;
        forx(i, s.size())
        {
            if(s[i] == '0')
            {
                if(a[i] == '(') b[i] = ')';
                else b[i] = '(';
            }
        }
        if(check(a) && check(b))
        {
            cout << "Yes" << "\n";
            cout << a << "\n" << b << "\n";
        }
        else cout << "No" << "\n";
    }
	return 0;
}