#include <cstdio>
#include <algorithm>
#include<iomanip>
#include <iostream>
#include <cmath>
#include <string>
#include <vector>
#include <set>
#include <queue>
#include <cstring>
#include<stack>
#include <cassert>
#include<map>
using namespace std;
typedef long long LL;
LL   n, k, m ;
LL i,j,g;
set<int> v[300];
bool st[100];
bool vis(int n ){
    return n>2?false:true;
}
void dfs(int u , int fa ){
    if(st[u]==0){
        putchar(u);
        st[u]=1 ;
    }
    for(auto &k : v[u]){
        if(k==fa)continue;
        dfs(k,u);
    }
}
int main()
{
   cin>>n;
   while(n--){
        string s;cin >>s;
        int len = s.size();
        if(len==1){
            cout<<"YES"<<endl;
            cout<<"bacdefghijklmnopqrstuvwxyz"<<endl;
            continue ;
        }
        for(int i=‘a‘;i<=‘z‘;i++){
            v[i].clear();
            st[i] = 0;
        }
        for(int i=1;i<len;i++){
            v[s[i]].insert(s[i-1]);
            v[s[i-1]].insert(s[i]);
        }
        int  cnt=0 ,pos =-1 , flag =1 ;
        for(int i=‘a‘;i<=‘z‘;i++){
            if(vis(v[i].size())==false){
               flag =0 ;break;
            }
            if(v[i].size()==1) cnt ++,pos= i;
            }
        if(!flag || cnt !=2){
            cout<<"NO"<<endl;
            continue;
        }
        cout<<"YES"<<endl;
        dfs(pos,-1);
        for(int i=‘a‘;i<=‘z‘;i++)dfs(i, -1 );
        cout<<endl;
        }
    return 0;
}
原文:https://www.cnblogs.com/QFNU-ACM/p/13356916.html