#include <bits/stdc++.h>
using namespace std;
const long long INF = 1000000007;
bool prime[100001];
void SieveOfEratosthenes() {
  memset(prime, true, sizeof(prime));
  for (int p = 2; p * p <= 100000; p++) {
    if (prime[p] == true) {
      for (int i = p * p; i <= 100000; i += p) prime[i] = false;
    }
  }
}
long long bs(vector<long long> a, long long s, long long e, long long x) {
  int l = s;
  int h = e;
  int m;
  while (l <= h) {
    m = (l + h) / 2;
    if (a[m] > x)
      h = m - 1;
    else if (a[m] < x)
      l = m + 1;
    else
      return m;
  }
  return -1;
}
long long mex(vector<long long> a, int n) {
  sort(a.begin(), a.end());
  int j = a[0];
  if (j != 0)
    return 0;
  else {
    for (int i = 1; i < n; i++) {
      if (a[i] != a[i - 1]) {
        if (a[i] != a[i - 1] + 1) {
          return j + 1;
        } else
          j++;
      }
    }
    return j + 1;
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  SieveOfEratosthenes();
  long long test;
  cin >> test;
  while (test--) {
    long long n;
    cin >> n;
    string s;
    cin >> s;
    vector<long long> a(n);
    a[0] = 1;
    int i = 1;
    vector<char> b[n + 1];
    b[1].push_back(s.at(0));
    int t = 1;
    while (i < n) {
      if (b[t][b[t].size() - 1] != s.at(i)) {
        a[i] = t;
        b[t].push_back(s.at(i));
        i++;
        if (b[t + 1].size() > 0) {
          b[t + 1][0] = b[t][b[t].size() - 1];
        }
      } else {
        if (t != 1) {
          if (s.at(i) != b[t][0]) {
            t--;
            b[t].push_back(s.at(i));
            a[i] = t;
            if (b[t + 1].size() > 0) {
              b[t + 1][0] = b[t][b[t].size() - 1];
            }
            i++;
          } else {
            t++;
            if (b[t].size() == 0) {
              b[t].push_back(s.at(i));
              a[i] = t;
              i++;
            }
          }
        } else {
          t++;
          if (b[t].size() == 0) {
            b[t].push_back(s.at(i));
            a[i] = t;
            i++;
          }
        }
      }
    }
    long long m = 0;
    for (i = 0; i < n; i++) {
      m = max(m, a[i]);
    }
    cout << m << endl;
    for (i = 0; i < n; i++) {
      cout << a[i] << " ";
    }
    cout << endl;
  }
}
