Cycle String?

Description:
Great wizard gave Alice and Bob a cycle string of length 2⋅n, which has no repeated substrings of length n. In a cycle string, character si+1 comes after si. Also, s1 comes after s2n.

Unfortunately, evil gin shuffled all the symbols of the string. Help Alice and Bob restore the original string so that the above condition is satisfied.

Input
The first line contains one string s of length 2⋅n (2≤2⋅n≤1000000) which consists only of the lowercase Latin letters.

Output
Print "NO" (without quotes) to the first line if it is impossible to restore the string so that the condition is satisfied. Otherwise, in the first line print "YES" (without quotes).

In the second line print one string — the restored string.

If there are multiple answers, print any.

Examples
Input
cbbabcacbb
Output
YES
abbabcbccb
Input
aa
Output
NO
Input
afedbc
Output
YES
afedbc
Note
In the first example, substrings of the restored string are: "abbab", "bbabc", "babcb", "abcbc", "bcbcc", "cbccb", "bccba", "ccbab", "cbabb", "babba".

Note that the first example does not contain repetitions, however it can be rewritten as another cycle with no repetitions. Thus, the solution is not unique — the given example is also a correct solution.

In the second example, it is impossible to restore the string so that no repetition exists.

In the third example, there is no need to change anything.

Problem solving:

Code:

#include <bits/stdc++.h>
using namespace std;
int a[30];
struct node
{
char c; int v;
} p[30];
bool cmp(node a, node b)
{
return a.v > b.v;
}
int main()
{
set<char> se;
string    s, ans;
cin >> s;
int       l = s.size();
for (int i = 0; i < s.size(); i++)
a[s[i] - 'a']++, se.insert(s[i]);
int mid = se.size();
for (int i = 0; i < 26; i++)
{
if (a[i] > l / 2 && mid <= 2)
if (!(a[i] < l - 2))
return cout << "NO\n", 0;
}
cout << "YES\n";
for (int i = 0; i < 26; i++)
{
p[i].c = i + 'a';
p[i].v = a[i];
}
sort(p, p + 26, cmp);
for (int i = 0; i < 26; i++)
{
while (p[i].v--)
ans += p[i].c;
}
swap(ans[l-2],ans[l/2]);
cout << ans << endl;
return 0;
}