#include <bits/stdc++.h> #define ll long long int #define ld long double using namespace std; void mainSolve() { int n; string s; cin >> n >> s; int freq[30] = {0}; for (auto ch : s) freq[ch - 'a']++; char ans[n + 1]; set <int> c1, c2, c3; for (int i = 1; i <= n; i++) { if (i % 3 == 1) c1.insert(i); if (i % 3 == 2) c2.insert(i); if (i % 3 == 0) c3.insert(i); } vector <pair<int, char>> v; for (char ch = 'a'; ch <= 'z'; ch++) v.push_back({freq[ch - 'a'], ch}); sort(v.begin(), v.end()); reverse(v.begin(), v.end()); int limit = (n + 2) / 3; int bad = 0; for (char ch = 'a'; ch <= 'z'; ch++) { if (freq[ch - 'a'] > limit) { cout << "NO\n"; return; } if (freq[ch - 'a'] == limit) bad++; } int afford = n % 3; if (afford == 0) afford = 3; if (bad > afford) { cout << "NO\n"; return; } cout << "YES\n"; for (auto it : v) { if (it.first == limit) { if (c1.size() == limit) { while (c1.size() > 0) { auto it2 = c1.begin(); ans[(*it2)] = it.second; c1.erase(it2); } continue; } if (c2.size() == limit) { while (c2.size() > 0) { auto it2 = c2.begin(); ans[(*it2)] = it.second; c2.erase(it2); } continue; } if (c3.size() == limit) { while (c3.size() > 0) { auto it2 = c3.begin(); ans[(*it2)] = it.second; c3.erase(it2); } continue; } } else { for (int i = 1; i <= it.first; i++) { if (c3.size() > 0) { auto it2 = c3.begin(); ans[(*it2)] = it.second; c3.erase(it2); continue; } if (c2.size() > 0) { auto it2 = c2.begin(); ans[(*it2)] = it.second; c2.erase(it2); continue; } if (c1.size() > 0) { auto it2 = c1.begin(); ans[(*it2)] = it.second; c1.erase(it2); continue; } } } } for (int i = 1; i <= n; i++) cout << ans[i]; cout << '\n'; } int main() { #ifndef ONLINE_JUDGE freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout); #endif int t; cin >> t; while (t--) { mainSolve(); } return 0; }