#include<bits/stdc++.h>
#define FOR(i,l,r) for(int i=l;i<=r;i++)
#define ROF(i,l,r) for(int i=l;i>=r;i--)
#define lson k<<1,l,mid
#define rson k<<1|1,mid+1,r
#define r(x) read(x)
#define rr(x,y) read(x);read(y)
#define rrr(x,y,z) read(x);read(y);read(z)
#define pb(x) push_back(x)
#define mp(x,y) make_pair(x,y)
#define fi first
#define se second
#define sss(str) scanf("%s",str+1)
using namespace std;
typedef long long LL;
typedef pair<int,int> pt;
const int N=2e6+5;
const int M=2e3+5;
const int mod=1e9+7;
const int INF=2e9;
const double eps=1e-8;
const double pi=acos(-1);
template <class T>
inline void read(T &x) {
    char c;x = 1;
    while ((c = getchar()) < '0' || c > '9') if (c == '-') x = -1;
    T res = c - '0';
    while ((c = getchar()) >= '0' && c <= '9') res = res * 10 + c - '0';
    x *= res;
}
int n,m;
char str[2][N];
bool check(int id)
{
    int now=0;
    FOR(i,1,n){
        if(str[id][i]=='(') ++now;
        else --now;
        if(now<0) return 0;
    }
    return now==0;
}
void solve(int cas)
{
    r(n);
    vector<int> v;
    string s; cin>>s;
    for(int i=0;i<s.size();++i){
        if(s[i]=='0'){
            v.pb(i+1);
        }
        str[0][i+1]=str[1][i+1]=0;
    }
    if((n&1)||(v.size()&1)){
        cout<<"NO\n";
        return ;
    }
    for(int i=0;i<v.size();++i){
        if(i&1){
            str[0][v[i]]='(';
            str[1][v[i]]=')';
        }
        else{
            str[0][v[i]]=')';
            str[1][v[i]]='(';
        }
    }
    int left=n/2-v.size()/2;
    FOR(i,1,n){
        if(str[0][i]) continue;
        if(left>0){
            --left;
            str[0][i]=str[1][i]='(';
        }
        else str[0][i]=str[1][i]=')';
    }
    if(check(0)&&check(1)){
        cout<<"YES\n";
        FOR(i,1,n) cout<<str[0][i];
        cout<<endl;
        FOR(i,1,n) cout<<str[1][i];
        cout<<endl;
    }
    else{
        cout<<"NO\n";
    }
}
int main()
{
    int t;
    r(t);
//    t=1;
//    init();
    FOR(i,1,t){
        solve(i);
    }
    return 0;
}
