#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define all(x) x.begin(), x.end()
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
template <typename T> using o_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
template <typename T, typename R> using o_map = tree<T, R, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
typedef long long ll;
#define inf 1e9
#define MOD 1000000007
#define vint vector<int>
#define vll vector<ll>
#define no cout << "NO" << endl;
#define yes cout << "YES" << endl;
string s;
int n;
vector<vector<set<string>>> dp;
set<string> f(int i, int type) {
if (i >= n) return {""} ;
if (i == n - 1) {
return {string(1, s[n-1])};
}
bool test =( dp[i][type].size() == 1 && ((*(dp[i][type].begin())) == "")) ;
if (!test) {
return dp[i][type];
}
set<string>& st = dp[i][type];
st.insert(s.substr(i, n - i));
if (type == 0) {
set<string> st1 = f(i+1, 0);
st.insert(all(st1));
char c = s[i];
set<string> st2 = f(i+2, 1);
for (auto &e : st2) {
string s1 = string(1, c) + e;
st.insert(s1);
}
return st ;
}
set < string > st2 = f(i+1 , 1) ;
st.insert(all(st2)) ;
return st;
}
void solve() {
cin >> n;
cin >> s;
dp.assign(n, vector<set<string>>(2, {""}));
// dp[0][0] = {"a", "b"} ;
set<string> ans = f(0, 0);
ll res= ans.size() ;
ans.erase("");
for (auto e : s ) {
ans.insert(string(1,e));
}
cout << ans.size() << endl;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#endif
int t = 1;
cin >> t;
while (t--) {
solve();
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIGFsbCh4KSB4LmJlZ2luKCksIHguZW5kKCkKI2luY2x1ZGUgPGV4dC9wYl9kcy9hc3NvY19jb250YWluZXIuaHBwPgojaW5jbHVkZSA8ZXh0L3BiX2RzL3RyZWVfcG9saWN5LmhwcD4KdXNpbmcgbmFtZXNwYWNlIF9fZ251X3BiZHM7CnRlbXBsYXRlIDx0eXBlbmFtZSBUPiB1c2luZyBvX3NldCA9IHRyZWU8VCwgbnVsbF90eXBlLCBsZXNzPFQ+LCByYl90cmVlX3RhZywgdHJlZV9vcmRlcl9zdGF0aXN0aWNzX25vZGVfdXBkYXRlPjsKdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFI+IHVzaW5nIG9fbWFwID0gdHJlZTxULCBSLCBsZXNzPFQ+LCByYl90cmVlX3RhZywgdHJlZV9vcmRlcl9zdGF0aXN0aWNzX25vZGVfdXBkYXRlPjsKdHlwZWRlZiBsb25nIGxvbmcgbGw7CgojZGVmaW5lIGluZiAxZTkKI2RlZmluZSBNT0QgMTAwMDAwMDAwNwojZGVmaW5lIHZpbnQgdmVjdG9yPGludD4KI2RlZmluZSB2bGwgdmVjdG9yPGxsPgojZGVmaW5lIG5vIGNvdXQgPDwgIk5PIiA8PCBlbmRsOwojZGVmaW5lIHllcyBjb3V0IDw8ICJZRVMiIDw8IGVuZGw7CgpzdHJpbmcgczsKaW50IG47CnZlY3Rvcjx2ZWN0b3I8c2V0PHN0cmluZz4+PiBkcDsKCnNldDxzdHJpbmc+IGYoaW50IGksIGludCB0eXBlKSB7CiAgICBpZiAoaSA+PSBuKSByZXR1cm4geyIifSA7CiAgICBpZiAoaSA9PSBuIC0gMSkgewogICAgICAgIHJldHVybiB7c3RyaW5nKDEsIHNbbi0xXSl9OwogICAgfQogICAgYm9vbCB0ZXN0ID0oIGRwW2ldW3R5cGVdLnNpemUoKSA9PSAxICAmJiAoKCooZHBbaV1bdHlwZV0uYmVnaW4oKSkpID09ICIiKSkgICA7CiAgICBpZiAoIXRlc3QpIHsKICAgICAgICByZXR1cm4gZHBbaV1bdHlwZV07CiAgICB9CgogICAgc2V0PHN0cmluZz4mIHN0ID0gZHBbaV1bdHlwZV07CiAgICBzdC5pbnNlcnQocy5zdWJzdHIoaSwgbiAtIGkpKTsKCgoKICAgIGlmICh0eXBlID09IDApIHsKICAgICAgICBzZXQ8c3RyaW5nPiBzdDEgPSBmKGkrMSwgMCk7CiAgICAgICAgc3QuaW5zZXJ0KGFsbChzdDEpKTsKICAgICAgICBjaGFyIGMgPSBzW2ldOwogICAgICAgIHNldDxzdHJpbmc+IHN0MiA9IGYoaSsyLCAxKTsKICAgICAgICBmb3IgKGF1dG8gJmUgOiBzdDIpIHsKICAgICAgICAgICAgc3RyaW5nIHMxID0gc3RyaW5nKDEsIGMpICsgZTsKICAgICAgICAgICAgc3QuaW5zZXJ0KHMxKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHN0IDsKICAgIH0KICAgIHNldCA8IHN0cmluZyA+IHN0MiA9IGYoaSsxICwgMSkgOwogICAgc3QuaW5zZXJ0KGFsbChzdDIpKSA7CgogICAgcmV0dXJuIHN0Owp9Cgp2b2lkIHNvbHZlKCkgewogICAgY2luID4+IG47CiAgICBjaW4gPj4gczsKICAgIGRwLmFzc2lnbihuLCB2ZWN0b3I8c2V0PHN0cmluZz4+KDIsIHsiIn0pKTsKLy8gICAgZHBbMF1bMF0gPSB7ImEiLCAiYiJ9IDsKICAgIHNldDxzdHJpbmc+IGFucyA9IGYoMCwgMCk7CiAgICBsbCByZXM9IGFucy5zaXplKCkgOwogICAgYW5zLmVyYXNlKCIiKTsKICAgIGZvciAoYXV0byBlIDogcyApIHsKICAgICAgICBhbnMuaW5zZXJ0KHN0cmluZygxLGUpKTsKICAgIH0KICAgIGNvdXQgPDwgYW5zLnNpemUoKSA8PCBlbmRsOwp9CgppbnQgbWFpbigpIHsKICAgIGlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUobnVsbHB0cik7CgojaWZuZGVmIE9OTElORV9KVURHRQogICAgZnJlb3BlbigiaW5wdXQudHh0IiwgInIiLCBzdGRpbik7CiAgICBmcmVvcGVuKCJvdXRwdXQudHh0IiwgInciLCBzdGRvdXQpOwojZW5kaWYKCiAgICBpbnQgdCA9IDE7CiAgICBjaW4gPj4gdDsKICAgIHdoaWxlICh0LS0pIHsKICAgICAgICBzb2x2ZSgpOwogICAgfQogICAgcmV0dXJuIDA7Cn0=