#include <bits/stdc++.h>
#include <iostream>

#define agry ios_base::sync_with_stdio(false),cin.tie(NULL)

using namespace std;
const int MMAX=0x7fffffff;
//const int N=2e5+10;
//long long B,C,S, pb,ps,pc,nb, ns,nc, m ;
const long long N=600;
bool vis[N][N];
int n,m,k, removal;
char grid[N][N];
vector<int> adj[N];
//int dfs(int u)
//
//{
//   //vis[u] = 1;
//   int sum=0;
//   for (auto ch:adj[u])
//   {
//       if (!vis[ch])
//        sum=max(sum,dfs(ch)+1);
//
//
//   }
//   return sum;
//}


//int bfs (int src, int dest)
//{
//    memset(levels,1,sizeof levels);
//    queue <int>q;
//    q.push(src);
//    levels[src]=0;
//    while (!q.empty())
//    {
//        int u=q.front();
//        q.pop();
//        if (u-1>0 && levels[u]+1 < levels[u-1])
//        {
//            levels[u-1]=levels[u]+1;
//            q.push(u-1);
//
//        }
//        if (u*2<N && levels[u]+1<levels[u*2])
//        {
//            levels[u*2]=levels[u]+1;
//            q.push(u*2);
//        }
//
//
//
//
//    }

int di[] = {-1, 0, 0,1};
int dj[]= {0, 1, -1,0};
//
//bool valid(int u)
//{
//    for (auto it:colors)
//    if (it.second >=4)return true;
//    else return false;
//
//
//}

void dfs(int  r, int c)
{
    vis[r][c]=1;



}


map <char,int>colors;

int main()
{
    agry;
   int t;

   cin >> t;
   while (t--)
   {



   int n;
   cin >> n;

   string s;
   cin >> s;


set<char>st;
   bool ok=true;

   for (int i = 0 ; i <n  && ok; i++)
   {
       if (i>0&&s[i]!=s[i-1]) // A   B
       {
           if (st.count(s[i]))
           {
               ok = false;
           }
       }
       st.insert(s[i]); // A..
   }
   if (ok)
    cout <<"YES" << endl;
   else
    cout <<"NO" << endl;

}
}

