func_code_string: #include <bits/stdc++.h>   using namespace std;   int main() {     int tst;     cin >> tst;     while (tst--) {       int i, j, k, l, m, n;       cin >> n;       string s;       cin >> s;       set<int> ze, on;       for (i = 0; i < n; i++) {         if (s[i] ==  1 )           on.insert(i);         else           ze.insert(i);       }       int ans[n + 10];       memset(ans, 0, sizeof ans);       int st = 1;       j = 0;       int ya = 0, kel, pt;       st = 0;       for (i = 0; i < n; i++) {         if (ans[i]) continue;         if (on.empty() || ze.empty()) break;         st++;         if (s[i] ==  0 ) {           kel = i;           pt = 0;           while (1) {             if (pt == 0) {               auto x = on.lower_bound(kel);               ans[kel] = st;               ze.erase(kel);               if (x == on.end()) {                 break;               } else {                 l = *x;                 ans[l] = st;                 on.erase(l);                 pt = 1 - pt;                 kel = l;               }             } else {               auto x = ze.lower_bound(kel);               ans[kel] = st;               on.erase(kel);               if (x == ze.end()) {                 break;               } else {                 l = *x;                 ans[l] = st;                 ze.erase(l);                 pt = 1 - pt;                 kel = l;               }             }           }         } else {           pt = 0;           kel = i;           while (1) {             if (pt == 0) {               auto x = ze.lower_bound(kel);               ans[kel] = st;               on.erase(kel);               if (x == ze.end()) {                 break;               } else {                 l = *x;                 ans[l] = st;                 ze.erase(l);                 pt = 1 - pt;                 kel = l;               }             } else {               auto x = on.lower_bound(kel);               ans[kel] = st;               ze.erase(kel);               if (x == on.end()) {                 break;               } else {                 l = *x;                 ans[l] = st;                 on.erase(l);                 pt = 1 - pt;                 kel = l;               }             }           }         }       }       st++;       if (on.size()) {         for (auto x : on) ans[x] = st, st++;       } else if (ze.size()) {         for (auto x : ze) ans[x] = st, st++;       }       set<int> kar;       for (i = 0; i < n; i++) kar.insert(ans[i]);       cout << kar.size() <<   n ;       for (i = 0; i < n; i++) cout << ans[i] <<    ;       cout <<   n ;     }   }   