/*
 
_/      _/    _/_/_/      _/_/_/    _/_/_/_/_/    _/_/_/    _/_/_/_/    _/      _/  _/      _/  _/      _/
_/      _/  _/      _/  _/      _/      _/      _/      _/  _/      _/  _/      _/   _/    _/    _/    _/
_/      _/  _/      _/  _/              _/      _/      _/  _/      _/  _/      _/    _/  _/      _/  _/
_/      _/  _/_/_/_/_/  _/              _/      _/      _/  _/_/_/_/    _/  _/  _/      _/         _/_/
  _/  _/    _/          _/              _/      _/      _/  _/  _/      _/  _/  _/      _/        _/  _/
   _/_/     _/      _/  _/      _/      _/      _/      _/  _/    _/     _/_/_/_/       _/       _/    _/
    _/        _/_/_/      _/_/_/        _/        _/_/_/    _/      _/    _/  _/        _/      _/      _/
 
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define ll long long
#define fo(i,x,y) for(register int i=x;i<=y;++i)
#define go(i,x,y) for(register int i=x;i>=y;--i)
using namespace std;

inline int read(){
	int x=0,fh=1;
	char ch=getchar();
	while(!isdigit(ch)){
		if(ch=='-') fh=-1;
		ch=getchar();
	}
	while(isdigit(ch)){
		x=(x<<1)+(x<<3)+ch-'0';
		ch=getchar();
	}
	return x*fh;
}

const int N=2e6+5;
char a[N],b[N];

void work(){
	int n=read();
	string s;
	cin>>s;
	int rp=0;
	fo(i,0,n-1) if(s[i]=='0') rp++;
	if(s[0]=='0'||s[n-1]=='0'||(rp&1)){
		puts("NO");
		return;
	}
	int cnt=(n-rp)/2,c1=0,c2=0;
	fo(i,0,n-1){
		if(s[i]=='1'){
			c1++;
			a[i]=b[i]=(c1<=cnt?'(':')');
		}else{
			c2++;
			a[i]=((c2&1)?')':'(');
			b[i]=a[i]=='('?')':'(';
		}
	}
	puts("YES");
	fo(i,0,n-1) putchar(a[i]);puts("");
	fo(i,0,n-1) putchar(b[i]);puts("");
}

int main(){
	int T=read();
	while(T--) work(); 
	return 0;
}