解题报告:
这题真不会。。看了别人的思路就是把奇偶不同的字母分为两类,然后排序,假设两个字符串是a和b ,这样我们检查a+b 是否合法,或者b+a是否合法,如果都不合法就没机会了,不难发现 a和b内部的差值都是偶数,一定是合法的,只需要check 两个字符串连接的地方是否是合法的就行了。

#include<iostream>
#include<cstring>
#include<vector>
#include<algorithm>
#include<map>
#include<set>
using namespace std;
typedef long long ll;
const int N=1010;
const int mod=1e9+7;
int gcd(int a,int b)
{
   
	return b?gcd(b,a%b):a;
}
int res;
int n,k;
ll f[210][10];	//考虑前i个 最多喝了j瓶药的最大积分
int m;
struct node{
   
	ll a;
	ll b;
	ll c;
}q[N];
int main()
{
   
	ios::sync_with_stdio(0);
	cin.tie(0),cout.tie(0);
	int t;
	cin>>t;
	while(t--)
	{
   
		string s;
		cin>>s;
		string s1,s2;
		for(int i=0;i<s.size();i++)
		{
   
			if(s[i]&1)	s1+=s[i];
			else	s2+=s[i];
		}
		sort(s1.begin(),s1.end());
		sort(s2.begin(),s2.end());
	//	cout<<s1<<' '<<s2<<endl;
		if(abs(s2[0]-s1[s1.size()-1]) !=1){
   
			cout<<s1+s2<<endl;
		}
		else if(abs(s2[s2.size()-1]-s1[0])!=1 )
			cout<<s2+s1<<endl;
		else
			cout<<"No answer"<<endl;
	}
	return 0;
}