#include <bits/stdc++.h>
using namespace std;
#define int long long int
#define double long double
#define print(a) for(auto x : a) cout << x << " "; cout << endl
const int M = 1000000007;
const int N = 3e5+9;
const int INF = 2e9+1;
const int LINF = 2000000000000000001;
inline int power(int a, int b) {
int x = 1;
a %= M;
while (b) {
if (b & 1) x = (x * a) % M;
a = (a * a) % M;
b >>= 1;
}
return x;
}
//_ ***************************** START Below *******************************
string a;
pair<int, vector<int>> consistency(int n){
vector<int> b(n);
int br = 0;
for(int i=0; i<n; i++){
if(a[i] == '(') br++;
else br--;
b[i] = br;
}
if(br != 0){
return {-1, {}};
}
vector<int> ans(n, 0);
bool isColor1 = false;
bool isColor2 = false;
int i = 0;
while(i<n){
while(i<n && b[i] >= 0){
ans[i] = 1;
isColor1 = true;
i++;
}
int j = i;
while(j<n && b[j] <= 0){
ans[j] = 2;
isColor2 = true;
j++;
}
i = j;
}
if(isColor1 && isColor2){
return {2, ans};
}
ans.assign(n, 1);
return {1, ans};
}
pair<int, vector<int>> practice(int n){
}
void solve() {
int n;
cin>> n;
cin >> a;
auto ans = consistency(n);
cout << ans.first << endl;
if(ans.first != -1){
for(auto& it : ans.second){
cout << it << " ";
}cout << endl;
}
}
int32_t main() {
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int t = 1;
cin >> t;
while (t--) {
solve();
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgaW50ICAgICAgICAgICAgICBsb25nIGxvbmcgaW50CiNkZWZpbmUgZG91YmxlICAgICAgICAgICBsb25nIGRvdWJsZQojZGVmaW5lIHByaW50KGEpICAgICAgICAgZm9yKGF1dG8geCA6IGEpIGNvdXQgPDwgeCA8PCAiICI7IGNvdXQgPDwgZW5kbAoKCmNvbnN0IGludCBNID0gMTAwMDAwMDAwNzsKY29uc3QgaW50IE4gPSAzZTUrOTsKY29uc3QgaW50IElORiA9IDJlOSsxOwpjb25zdCBpbnQgTElORiA9IDIwMDAwMDAwMDAwMDAwMDAwMDE7CgppbmxpbmUgaW50IHBvd2VyKGludCBhLCBpbnQgYikgewogICAgaW50IHggPSAxOwogICAgYSAlPSBNOwogICAgd2hpbGUgKGIpIHsKICAgICAgICBpZiAoYiAmIDEpIHggPSAoeCAqIGEpICUgTTsgCiAgICAgICAgYSA9IChhICogYSkgJSBNOwogICAgICAgIGIgPj49IDE7CiAgICB9CiAgICByZXR1cm4geDsKfQoKCi8vXyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBTVEFSVCBCZWxvdyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgoKCgpzdHJpbmcgYTsKCgpwYWlyPGludCwgdmVjdG9yPGludD4+IGNvbnNpc3RlbmN5KGludCBuKXsKCiAgICB2ZWN0b3I8aW50PiBiKG4pOwogICAgaW50IGJyID0gMDsKICAgIGZvcihpbnQgaT0wOyBpPG47IGkrKyl7CiAgICAgICAgaWYoYVtpXSA9PSAnKCcpIGJyKys7CiAgICAgICAgZWxzZSBici0tOwogICAgICAgIGJbaV0gPSBicjsKICAgIH0KCiAgICBpZihiciAhPSAwKXsKICAgICAgICByZXR1cm4gey0xLCB7fX07CiAgICB9CgogICAgdmVjdG9yPGludD4gYW5zKG4sIDApOwogICAgYm9vbCBpc0NvbG9yMSA9IGZhbHNlOwogICAgYm9vbCBpc0NvbG9yMiA9IGZhbHNlOwoKICAgIGludCBpID0gMDsKICAgIHdoaWxlKGk8bil7CiAgICAgICAgd2hpbGUoaTxuICYmIGJbaV0gPj0gMCl7CiAgICAgICAgICAgIGFuc1tpXSA9IDE7CiAgICAgICAgICAgIGlzQ29sb3IxID0gdHJ1ZTsKICAgICAgICAgICAgaSsrOwogICAgICAgIH0KCiAgICAgICAgaW50IGogPSBpOwogICAgICAgIHdoaWxlKGo8biAmJiBiW2pdIDw9IDApewogICAgICAgICAgICBhbnNbal0gPSAyOwogICAgICAgICAgICBpc0NvbG9yMiA9IHRydWU7CiAgICAgICAgICAgIGorKzsKICAgICAgICB9CiAgICAgICAgaSA9IGo7CiAgICB9CgogICAgaWYoaXNDb2xvcjEgJiYgaXNDb2xvcjIpewogICAgICAgIHJldHVybiB7MiwgYW5zfTsKICAgIH0KCiAgICBhbnMuYXNzaWduKG4sIDEpOwoKICAgIHJldHVybiB7MSwgYW5zfTsgICAgCgp9CgoKCgoKCgoKCgoKCgoKcGFpcjxpbnQsIHZlY3RvcjxpbnQ+PiBwcmFjdGljZShpbnQgbil7CgoKfQoKCgoKCnZvaWQgc29sdmUoKSB7CiAgICAKICAgIGludCBuOwogICAgY2luPj4gbjsKCiAgICBjaW4gPj4gYTsKICAgIAogICAgYXV0byBhbnMgPSBjb25zaXN0ZW5jeShuKTsKCiAgICBjb3V0IDw8IGFucy5maXJzdCA8PCBlbmRsOwogICAgaWYoYW5zLmZpcnN0ICE9IC0xKXsKICAgICAgICBmb3IoYXV0byYgaXQgOiBhbnMuc2Vjb25kKXsKICAgICAgICAgICAgY291dCA8PCBpdCA8PCAiICI7CiAgICAgICAgfWNvdXQgPDwgZW5kbDsKICAgIH0KCgp9CgoKCgoKaW50MzJfdCBtYWluKCkgewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsgY2luLnRpZSgwKTsgY291dC50aWUoMCk7CgogICAgaW50IHQgPSAxOwogICAgY2luID4+IHQ7CiAgICB3aGlsZSAodC0tKSB7CiAgICAgICAgc29sdmUoKTsKICAgIH0KCiAgICByZXR1cm4gMDsKfQ==