#include <bits/stdc++.h>
using namespace std;
const int MOD = 1000000007;
using namespace std;
long long int modpow(long long int a, long long int b) {
  long long int res = 1;
  a %= MOD;
  for (; b; b >>= 1) {
    if (b & 1) res = res * a % MOD;
    a = a * a % MOD;
  }
  return res;
}
string ans;
int cycle;
void dfs(int node, vector<set<int>>& adj, vector<int>& visited, int par) {
  ans += (node + 97);
  visited[node] = 1;
  for (int i : adj[node]) {
    if (i == par) continue;
    if (!visited[i]) {
      dfs(i, adj, visited, node);
    }
  }
}
void cyc(int node, vector<set<int>>& adj, vector<int>& visited, int par) {
  visited[node] = 1;
  for (int i : adj[node]) {
    if (i == par) continue;
    if (visited[i]) {
      cycle = 1;
    } else
      cyc(i, adj, visited, node);
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  int t;
  cin >> t;
  for (int g = (int)0; g < (int)t; ++g) {
    cycle = 0;
    ans = "";
    string s;
    cin >> s;
    int n = s.size();
    vector<set<int>> adj(26);
    for (int i = (int)0; i < (int)n - 1; ++i) {
      if (s[i] != s[i + 1]) {
        adj[s[i] - 97].insert(s[i + 1] - 97);
        adj[s[i + 1] - 97].insert(s[i] - 97);
      }
    }
    int flag = 1;
    vector<int> visited(26);
    for (int i = (int)0; i < (int)26; ++i)
      if (adj[i].size() > 2) flag = 0;
    for (int i = (int)0; i < (int)26; ++i) {
      if (!visited[i]) {
        cyc(i, adj, visited, i);
      }
    }
    for (int i = (int)0; i < (int)26; ++i) visited[i] = 0;
    for (int i = (int)0; i < (int)26; ++i) {
      if (adj[i].size() <= 1 && !visited[i]) {
        dfs(i, adj, visited, i);
      }
    }
    if (cycle || !flag)
      cout << "NO\n";
    else {
      cout << "YES\n";
      cout << ans << "\n";
    }
  }
}
