#include <bits/stdc++.h>
#pragma GCC optimize("O3")
#pragma GCC target("sse4")
using namespace std;
long long int ll_max(long long int a, long long int b, long long int c) {
  return max(a, max(b, c));
}
const int inf = 0x3f3f3f3f;
const long long int llinf = 0x3f3f3f3f3f3f;
const int mod = 1000000007;
const char nl = '\n';
const int MX = 100001;
void solve() {
  long long int n;
  cin >> n;
  string second;
  cin >> second;
  vector<long long int> seq(n);
  long long int curr = 1;
  seq[0] = 1;
  long long int cnt = 1;
  long long int zc = 0, oc = 0;
  stack<int> zero, one;
  long long int max_curr = curr;
  for (int i = 1; i < n; i++) {
    if (second[i] == second[i - 1]) {
      if (second[i] == '1') {
        oc++;
        one.push(curr);
        if (zero.empty()) {
          curr = ++max_curr;
          max_curr = max(max_curr, curr);
          seq[i] = curr;
          cnt++;
        } else {
          curr = zero.top();
          max_curr = max(max_curr, curr);
          seq[i] = zero.top();
          zero.pop();
        }
      } else {
        zc++;
        zero.push(curr);
        if (one.empty()) {
          curr = ++max_curr;
          seq[i] = curr;
          cnt++;
        } else {
          curr = one.top();
          max_curr = max(max_curr, curr);
          seq[i] = one.top();
          one.pop();
        }
      }
    } else
      seq[i] = curr;
  }
  cout << *max_element(seq.begin(), seq.end()) << endl;
  for (auto it : seq) cout << it << " ";
  cout << endl;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  long long int t;
  cin >> t;
  while (t--) solve();
  return 0;
}
