#ifdef WTSH
    #include <wtsh.h>
#else
    #include <bits/stdc++.h>
    using namespace std;
    #define dbg(...)
#endif

#define int long long
#define endl "\n"
#define sz(w) (int)(w.size())
using pii = pair<int, int>;

const long long INF = 1e18;

const int N = 1e6 + 5; 

// -------------------- Input Checker Start --------------------

long long readInt(long long l, long long r, char endd)
{
    long long x = 0;
    int cnt = 0, fi = -1;
    bool is_neg = false;
    while(true)
    {
        char g = getchar();
        if(g == '-')
        {
            assert(fi == -1);
            is_neg = true;
            continue;
        }
        if('0' <= g && g <= '9')
        {
            x *= 10;
            x += g - '0';
            if(cnt == 0)
                fi = g - '0';
            cnt++;
            assert(fi != 0 || cnt == 1);
            assert(fi != 0 || is_neg == false);
            assert(!(cnt > 19 || (cnt == 19 && fi > 1)));
        }
        else if(g == endd)
        {
            if(is_neg)
                x = -x;
            if(!(l <= x && x <= r))
            {
                cerr << l << ' ' << r << ' ' << x << '\n';
                assert(false);
            }
            return x;
        }
        else
        {
            assert(false);
        }
    }
}

string readString(int l, int r, char endd)
{
    string ret = "";
    int cnt = 0;
    while(true)
    {
        char g = getchar();
        assert(g != -1);
        if(g == endd)
            break;
        cnt++;
        ret += g;
    }
    assert(l <= cnt && cnt <= r);
    return ret;
}

long long readIntSp(long long l, long long r) { return readInt(l, r, ' '); }
long long readIntLn(long long l, long long r) { return readInt(l, r, '\n'); }
string readStringLn(int l, int r) { return readString(l, r, '\n'); }
string readStringSp(int l, int r) { return readString(l, r, ' '); }
void readEOF() { assert(getchar() == EOF); }

vector<int> readVectorInt(int n, long long l, long long r)
{
    vector<int> a(n);
    for(int i = 0; i < n - 1; i++)
        a[i] = readIntSp(l, r);
    a[n - 1] = readIntLn(l, r);
    return a;
}

// -------------------- Input Checker End --------------------

bool check(string &s)
{
    for(char c: s)
        if(c == ' ')
            return false;
    for(int i = 0; i + 2 < sz(s); i++)
        if(s[i] == s[i + 2])
            return false;
    for(int i = 0; i + 1 < sz(s); i++)
        if(s[i] == s[i + 1])
            return false;
    return true;
}

int sumN = 0;

int32_t main()
{
    ios::sync_with_stdio(0); 
    cin.tie(0);
    int T = readIntLn(1, 1e5);
    while(T--)
    {
        int n = readIntLn(1, 1e5);
        sumN += n;
        string s = readStringLn(n, n);
        assert(*min_element(s.begin(), s.end()) >= 'a' and *max_element(s.begin(), s.end()) <= 'z');
        int f[26] = {};
        for(char c: s)
            f[c - 'a']++;
        vector<pair<int, char>> v;
        for(int i = 0; i < 26; i++)
            v.push_back({f[i], 'a' + i});       
        sort(v.begin(), v.end(), greater{});
        int cntmx = 0;
        for(auto &[cnt, c]: v)
            cntmx += cnt == (n + 2) / 3;
        int allowed = n % 3;
        if(allowed == 0) allowed += 3;
        if(v[0].first <= (n + 2) / 3 and cntmx <= allowed)
        {
            cout << "YES\n";
            string ans(n, ' ');
            string have = "";
            for(auto [cnt, c]: v)
                have += string(cnt, c);
            int limit = ((n % 3 == 0) ? n - 1 : n);
            int cur = 0;
            for(int i = 0; i < limit; i++, cur = (cur + 3) % limit)
            {
                ans[cur] = have[i];
            } 
            if(n % 3 == 0)
            {
                ans[n - 1] = have[n - 1];
                if(ans[n - 1] == ans[n - 2] or ans[n - 1] == ans[n - 3])
                    swap(ans[n - 1], ans[0]);
            }
            cout << ans << endl;
            assert(check(ans));
        }
        else
            cout << "NO\n";
    }
    readEOF();
    assert(sumN <= 2e5);
    return 0;
}