#include<bits/stdc++.h>
using namespace std;
#define IOS ios_base::sync_with_stdio(false);cin.tie(NULL);
#define ll long long
#define ff first
#define ss second
#define pb push_back
#define pf push_front
#define mp make_pair
#define pu push
#define pp pop_back
#define in insert
#define ld long double
#define endl '\n'
#define debug cout << "Hold right there sparky.....\n";
#define forn(low,high,i) for(i=low;i<high;i++)
#define forrev(high,low,i) for(i = high; i>= low;i--)
#define trace(x) cerr << #x << ": " << x << " " << endl;
#define all(v) v.begin(),v.end()
#define sz(v) (int)v.size()
typedef unordered_map<int,int> umi;
typedef unordered_map<ll,ll> uml;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<vi> vvi;
typedef vector<vl> vvl;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
typedef vector<pii> vpii;
typedef vector<pll> vpll;
bool comp(pii x,pii y)
{
if(x.ff != y.ff)
return x.ff > y.ff;
else
return x.ss > y.ss;
}
int main()
{
IOS;
int t;
ll n,i,j,k;
cin >> t;
string s;
while(t--)
{
cin >> n >> s;
ll a,b;
b = 0;
a = 1;
ll cnt[26];
n = s.size();
memset(cnt,0,sizeof(cnt));
ll temp = 1;
forn(1,n,i)
{
if(s[i] == s[i-1])
temp++;
else
{
cnt[s[i - 1] - 'a'] = max(cnt[s[i-1] - 'a'],temp);
temp = 1;
}
}
cnt[s[n - 1] - 'a'] = max(cnt[s[n-1] - 'a'],temp);
ll res = 0;
forn(0,26,i)
{
res += cnt[i];
}
int alpha,beta,gamma;
unordered_map<int,vpll> substr;
alpha = s[0] -'a';
for(i=1;i<n;i++)
{
if(s[i] == s[i-1])
{
a++;
alpha = s[i] - 'a';
}
else
{
beta = s[i] - 'a';
b++;
for(j=i+1;j<n;j++)
{
if(s[j] == s[j-1])
b++;
else
break;
}
//cout << alpha << "," << beta << " : ";
gamma = 27*alpha + beta;
//cout << gamma << '\n';
i = j - 1;
if(i && b)substr[gamma].pb({a,b});
alpha = beta;
beta = 0;
a = b;
b = 0;
}
}
int prev_x,prev_y,t;
for(auto x : substr)
{
//cout << x.ff << " : ";
sort(all(x.ss),comp); //Sorted in decreasing order of letter1's frequecy with tie breker as descending order of letter2's frequency
res += x.ss[0].ff * x.ss[0].ss;
prev_x = x.ss[0].ff;
prev_y = x.ss[0].ss;
for(i=1;i<x.ss.size();i++)
{
if(x.ss[i].ss <= prev_y);
else
{
res += (x.ss[i].ff)*(x.ss[i].ss - prev_y);
}
// cout << (x.ss[i].ff)*(x.ss[i].ss - prev_y) << ' ';
prev_x = x.ss[i].ff;
prev_y = x.ss[i].ss;
}
}
cout << res << '\n';
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCiNkZWZpbmUgSU9TIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpO2Npbi50aWUoTlVMTCk7IAojZGVmaW5lIGxsIGxvbmcgbG9uZwojZGVmaW5lIGZmIGZpcnN0CiNkZWZpbmUgc3Mgc2Vjb25kCiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgcGYgcHVzaF9mcm9udAojZGVmaW5lIG1wIG1ha2VfcGFpcgojZGVmaW5lIHB1IHB1c2gKI2RlZmluZSBwcCBwb3BfYmFjawojZGVmaW5lIGluIGluc2VydAojZGVmaW5lIGxkIGxvbmcgZG91YmxlCiNkZWZpbmUgZW5kbCAnXG4nCiNkZWZpbmUgZGVidWcgY291dCA8PCAiSG9sZCByaWdodCB0aGVyZSBzcGFya3kuLi4uLlxuIjsKI2RlZmluZSBmb3JuKGxvdyxoaWdoLGkpIGZvcihpPWxvdztpPGhpZ2g7aSsrKQojZGVmaW5lIGZvcnJldihoaWdoLGxvdyxpKSBmb3IoaSA9IGhpZ2g7IGk+PSBsb3c7aS0tKQojZGVmaW5lIHRyYWNlKHgpIGNlcnIgPDwgI3ggPDwgIjogIiA8PCB4IDw8ICIgIiA8PCBlbmRsOwojZGVmaW5lIGFsbCh2KSB2LmJlZ2luKCksdi5lbmQoKQojZGVmaW5lIHN6KHYpIChpbnQpdi5zaXplKCkKCnR5cGVkZWYgdW5vcmRlcmVkX21hcDxpbnQsaW50PiB1bWk7CnR5cGVkZWYgdW5vcmRlcmVkX21hcDxsbCxsbD4gdW1sOwp0eXBlZGVmIHZlY3RvcjxpbnQ+IHZpOwp0eXBlZGVmIHZlY3RvcjxsbD4gdmw7CnR5cGVkZWYgdmVjdG9yPHZpPiB2dmk7CnR5cGVkZWYgdmVjdG9yPHZsPiB2dmw7CnR5cGVkZWYgcGFpcjxpbnQsaW50PiBwaWk7CnR5cGVkZWYgcGFpcjxsbCxsbD4gcGxsOwp0eXBlZGVmIHZlY3RvcjxwaWk+IHZwaWk7CnR5cGVkZWYgdmVjdG9yPHBsbD4gdnBsbDsKCmJvb2wgY29tcChwaWkgeCxwaWkgeSkKewoJaWYoeC5mZiAhPSB5LmZmKQoJCXJldHVybiB4LmZmID4geS5mZjsKCWVsc2UKCQlyZXR1cm4geC5zcyA+IHkuc3M7Cn0KCmludCBtYWluKCkKewoJSU9TOwoJaW50IHQ7CglsbCBuLGksaixrOwoJY2luID4+IHQ7CglzdHJpbmcgczsKCXdoaWxlKHQtLSkKCXsKCQljaW4gPj4gbiA+PiBzOwoJCWxsIGEsYjsKCQliID0gMDsKCQlhID0gMTsKCQlsbCBjbnRbMjZdOwoJCW4gPSBzLnNpemUoKTsKCQltZW1zZXQoY250LDAsc2l6ZW9mKGNudCkpOwoJCWxsIHRlbXAgPSAxOwoJCWZvcm4oMSxuLGkpCgkJewoJCQlpZihzW2ldID09IHNbaS0xXSkKCQkJCXRlbXArKzsKCQkJZWxzZQoJCQl7CgkJCQljbnRbc1tpIC0gMV0gLSAnYSddID0gbWF4KGNudFtzW2ktMV0gLSAnYSddLHRlbXApOwoJCQkJdGVtcCA9IDE7CgkJCX0KCQl9CgkJY250W3NbbiAtIDFdIC0gJ2EnXSA9IG1heChjbnRbc1tuLTFdIC0gJ2EnXSx0ZW1wKTsKCQlsbCByZXMgPSAwOwoJCWZvcm4oMCwyNixpKQoJCXsKCQkJcmVzICs9IGNudFtpXTsKCQl9CgkJaW50IGFscGhhLGJldGEsZ2FtbWE7CgkJdW5vcmRlcmVkX21hcDxpbnQsdnBsbD4gc3Vic3RyOwoJCWFscGhhID0gc1swXSAtJ2EnOwoJCWZvcihpPTE7aTxuO2krKykKCQl7CgkJCWlmKHNbaV0gPT0gc1tpLTFdKQoJCQl7CgkJCQlhKys7CgkJCQlhbHBoYSA9IHNbaV0gLSAnYSc7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQliZXRhID0gc1tpXSAtICdhJzsKCQkJCWIrKzsKCQkJCWZvcihqPWkrMTtqPG47aisrKQoJCQkJewoJCQkJCWlmKHNbal0gPT0gc1tqLTFdKQoJCQkJCQliKys7CgkJCQkJZWxzZQoJCQkJCQlicmVhazsKCQkJCX0KCQkJCS8vY291dCA8PCBhbHBoYSA8PCAiLCIgPDwgYmV0YSA8PCAiIDogIjsKCQkJCWdhbW1hID0gMjcqYWxwaGEgKyBiZXRhOwoJCQkJLy9jb3V0IDw8IGdhbW1hIDw8ICdcbic7CgkJCQlpID0gaiAtIDE7CgkJCQlpZihpICYmIGIpc3Vic3RyW2dhbW1hXS5wYih7YSxifSk7CgkJCQlhbHBoYSA9IGJldGE7CgkJCQliZXRhID0gMDsKCQkJCWEgPSBiOwoJCQkJYiA9IDA7CgkJCX0KCQl9CgkJaW50IHByZXZfeCxwcmV2X3ksdDsKCQlmb3IoYXV0byB4IDogc3Vic3RyKQoJCXsKCQkJLy9jb3V0IDw8IHguZmYgPDwgIiA6ICI7CgkJCXNvcnQoYWxsKHguc3MpLGNvbXApOwkJLy9Tb3J0ZWQgaW4gZGVjcmVhc2luZyBvcmRlciBvZiBsZXR0ZXIxJ3MgZnJlcXVlY3kgd2l0aCB0aWUgYnJla2VyIGFzIGRlc2NlbmRpbmcgb3JkZXIgb2YgbGV0dGVyMidzIGZyZXF1ZW5jeQoJCQlyZXMgKz0geC5zc1swXS5mZiAqIHguc3NbMF0uc3M7CgkJCXByZXZfeCA9IHguc3NbMF0uZmY7CgkJCXByZXZfeSA9IHguc3NbMF0uc3M7CgkJCWZvcihpPTE7aTx4LnNzLnNpemUoKTtpKyspCgkJCXsKCQkJCWlmKHguc3NbaV0uc3MgPD0gcHJldl95KTsKCQkJCWVsc2UKCQkJCXsKCQkJCQlyZXMgKz0gKHguc3NbaV0uZmYpKih4LnNzW2ldLnNzIC0gcHJldl95KTsKCQkJCX0KCQkJLy8JY291dCA8PCAoeC5zc1tpXS5mZikqKHguc3NbaV0uc3MgLSBwcmV2X3kpIDw8ICcgJzsKCQkJCXByZXZfeCA9IHguc3NbaV0uZmY7CgkJCQlwcmV2X3kgPSB4LnNzW2ldLnNzOwoJCQl9CgkJfQoJCWNvdXQgPDwgcmVzIDw8ICdcbic7Cgl9CglyZXR1cm4gMDsKfQ==