#include <bits/stdc++.h>
using namespace std;

#define ios ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
#define ll long long
#define inf INT_MAX
#define llinf LLONG_MAX
#define mt make_tuple
#define mp make_pair
#define parll pair<ll,ll>
#define parii pair<int,int>
#define nzd __gcd
#define nzs(e1,e2) (e1/nzd(e1,e2))*e2
#define min3(brp1,brp2,brp3) min(brp1,min(brp2,brp3))
#define min4(brp1,brp2,brp3,brp4) min(brp1,min3(brp2,brp3,brp4))
#define max3(brp1,brp2,brp3) max(brp1,max(brp2,brp3))
#define max4(brp1,brp2,brp3,brp4) max(brp1,max3(brp2,brp3,brp4))
#define l_b(BRL,brl) lower_bound( BRL.begin(), BRL.end(), brl )-BRL.begin()-1 /// !za one based! vraca mani iako brl postoji, vraca 0 kada ne postoji manji
#define u_b(BRU,bru) upper_bound( BRU.begin(), BRU.end(), bru )-BRU.begin() /// !za one based! vraca veci iako bru postoji, vraca n+1 kada ne postoji veci
#define mod 1000000007

ll q,n,a=0,b=0,last_zero;
bool moze = true;
string S,A,B;

void Metoda( ll i )
{
    if ( a == 0 && b == 0 )
    {
        if ( S[i] == '1' )
        {
            a = 1; b = 1;
            A += '('; B += '(';
            return;
        }
        moze = false;
        return;
    }
    if ( a == 1 && b == 1 )
    {
        if ( S[i] == '0' )
        {
            a = 0; b = 2;
            A += ')'; B += '(';
            return;
        }
        if ( i == n-1 || S[i+1] == '1' )
        {
            a = b = 0;
            A += ')'; B += ')';
            return;
        }
        a = 2; b = 2;
        A += '('; B += '(';
        return;
    }
    if ( a == 2 && b == 2 )
    {
        if ( S[i] == '1' )
        {
            a = b = 1;
            A += ')'; B += ')';
            return;
        }
        a = 1; b = 3;
        A += ')'; B += '(';
        return;
    }
    if ( a == 0 && b == 2 )
    {
        if ( S[i] == '1' )
        {
            a = 1; b = 3;
            A += '('; B += '(';
            return;
        }
        a = b = 1;
        A += '('; B += ')';
        return;
    }
    if ( a == 1 && b == 3 )
    {
        if ( S[i] == '1' )
        {
            a = 0; b = 2;
            A += ')'; B += ')';
            return;
        }
        a = b = 2;
        A += '('; B += ')';
        return;
    }
}

int main()
{
    ios;

    cin >> q;
    while ( q-- )
    {
        cin >> n;
        cin >> S;
        //S += '1';
        if ( S[0] == '0' || S[n-1] == '0' )
        {
            cout << "NO\n";
            continue;
        }
        last_zero=-1;
        for ( ll i = n-1; i >= 0; i-- )
        {
            if ( S[i] == '0' )
            {
                last_zero = i;
                break;
            }
        }
        a=0,b=0; moze = true; A = ""; B = "";
        for ( ll i = 0; i < n; i++ )
        {
            Metoda(i);
            if ( !moze )
            {
                break;
            }
        }

        if ( a != 0 || b != 0 )
        {
            moze = false;
        }
        if ( !moze )
        {
            cout << "NO\n";
            continue;
        }
        cout << "YES\n" << A << "\n" << B << "\n";
    }

    return 0;
}
