/*
 *    author:  bwayne


	`-._:  .:'   `:::  .:\           |\__/|           /::  .:'   `:::  .:.-'
	    \      :          \          |:   |          /         :       /
	     \     ::    .     `-_______/ ::   \_______-'   .      ::   . /
	      |  :   :: ::'  :   :: ::'  :   :: ::'      :: ::'  :   :: :|
	      |     ;::         ;::         ;::         ;::         ;::  |
	      |  .:'   `:::  .:'   `:::  .:'   `:::  .:'   `:::  .:'   `:|
	      /     :           :           :           :           :    \
	     /______::_____     ::    .     ::    .     ::   _____._::____\
	                   `----._:: ::'  :   :: ::'  _.----'
	                          `--.       ;::  .--'
	                              `-. .:'  .-'
	                                 \    /
	                                  \  /
	                                   \/
*/

#include<bits/stdc++.h>
using namespace std;


#define ff              first
#define ss              second
#define pb              push_back
#define mp              make_pair
#define ll 				long long
#define ld 				long double
#define pii             pair<ll,ll>
#define vi              vector<ll>
#define mii               map<ll,ll>
#define pqi             priority_queue<ll>			//max pq
#define pqd             priority_queue<ll,vi,greater<ll> >
#define setbits(x)      __builtin_popcountll(x)
#define zrobits(x)      __builtin_ctzll(x)
#define MOD             1000000007
#define inf             1e18
#define ps(x,y)         fixed<<setprecision(y)<<x
#define pw(b,p)         pow(b,p) + 0.1
#define f(i,k,n)		for(ll i=k;i<n;i++)
#define fd(i,start,end)	for(ll i=start;i>=end;i--)
#define LSOne(S) (S & (-S))



ll power(ll a, ll b, ll mod) {ll res = 1; a %= mod; assert(b >= 0); for (; b; b >>= 1) {if (b & 1)res = res * a % mod; a = a * a % mod;} return res;}
ll power(ll a, ll b) {ll res = 1; assert(b >= 0); for (; b; b >>= 1) {if (b & 1)res = res * a ; a = a * a;} return res;}
ll min( ll a,  ll b) { return (a < b) ? a : b;}
ll max(ll a, ll b) {return (a > b) ? a : b;}
ll gcd (ll a, ll b) {if (a == 0) return  b; return gcd(b % a, a);}


ll mul(ll a, ll b) {
	return (1LL * a * b) % MOD;
}

ll add(ll a, ll b) {
	ll s = (a + b);
	if (s >= MOD) s -= MOD;
	return s;
}

ll sub(ll a, ll b) {
	ll s = (a + MOD - b);
	if (s >= MOD) s -= MOD;
	return s;
}


void bwayne()
{
	ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#ifndef ONLINE_JUDGE
	freopen("input.txt", "r", stdin);
	freopen("output.txt", "w", stdout);
#endif
}


// ll n;
// cin >> n;
// vi a(n);
// f(i, 0, n) {
// 	cin >> a[i];
// }

// vector<vi> a(n,vector<ll>(m,0));
// f(i,0,n){
// 	f(j,0,m){
// 		cin>>a[i][j];
// 	}
// }


void solve() {


	ll n;
	cin >> n;
	string a;
	cin >> a;

	ll i = 0;
	vector<vi> v(26);
	while (i < n) {
		char now = a[i];
		ll count = 0;
		while (i < n && a[i] == now) {
			i++;
			count++;
		}
		v[now - 'a'].pb(count);
	}
	for (int i = 0; i < 26; i++) {
		sort(v[i].begin(), v[i].end(), greater<ll>());
	}
	vi dp(n + 1, 0);

	for (int i = 0; i < 26; i++) {
		ll past = 0;
		for (int j = 0; j < v[i].size(); j++) {
			ll now = v[i][j];
			dp[j] = max(dp[j], now + past);
			past += now;
		}
	}

	for (int i = 1; i <= n; i++) {
		dp[i] = max(dp[i], dp[i - 1]);
	}
	f(i, 0, n + 1) {
		cout << dp[i] << " ";
	}
	cout << endl;


}

int main()
{
	bwayne();// remember
	ll t = 1;
	cin >> t;

	for (ll tt = 1; tt <= t; tt++)
	{
		// cout << "Case #" << tt << ": ";
		solve();
	}

	return 0;
}