#include <iostream>
#include<bits/stdc++.h>
using namespace std;
#include <ext/pb_ds/assoc_container.hpp>
using namespace __gnu_pbds;
// X.find_by_order(k) return kth element. 0 indexed.
// X.order_of_key(k) returns count of elements strictly less than k.
template<class T> using ordered_set = tree<T, null_type, greater<T>,rb_tree_tag, tree_order_statistics_node_update>;
template<class T> using ordered_multi_set = tree<T, null_type, greater_equal<T>, rb_tree_tag, tree_order_statistics_node_update>;
//typedef tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update> ordered_set;
//typedef tree<pair<long long,char>,null_type,greater<pair<long long,char>>,rb_tree_tag,tree_order_statistics_node_update> ordered_multiset;
#define ll long long
void Erase(ordered_multi_set<pair<ll,char>> &s,pair<ll,char>val) {
ll rank = s.order_of_key(val);
auto it = s.find_by_order(rank);
s.erase(it);
}
signed main() {
string s;
cin>>s;
ll n=s.size();
map<char,ll>mp;
for (auto i:s)mp[i]++;
ll ma=0;
for (auto [x,y]:mp) {
ma=max(ma,y);
}
if (ma>n-ma+1) {
cout<<"NO";
return 0;
}
priority_queue<pair<ll,char>>q;
ordered_multi_set<pair<ll,char>>st;
for (auto [x,y]:mp) {
// q.push({y,x});
st.insert({y,x});
}
string ans="";
while (!st.empty()) {
auto [x,y]=*st.begin();
if (ans.empty()) {
ans.push_back(y);
Erase(st,{x,y});
x--;
if (x!=0) {
st.insert({x,y});
}
}else {
if (ans[(int)ans.size()-1]!=y) {
ans.push_back(y);
Erase(st,{x,y});
x--;
if (x!=0) {
st.insert({x,y});
}
}else {
Erase(st,{x,y});
auto [c,d]=*st.begin();
ans.push_back(d);
Erase(st,{c,d});
c--;
if (c!=0) {
st.insert({c,d});
}
st.insert({x,y});
}
}
}
cout<<"YES\n";
cout<<ans<<"\n";
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZTxiaXRzL3N0ZGMrKy5oPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKI2luY2x1ZGUgPGV4dC9wYl9kcy9hc3NvY19jb250YWluZXIuaHBwPgoKdXNpbmcgbmFtZXNwYWNlIF9fZ251X3BiZHM7Ci8vIFguZmluZF9ieV9vcmRlcihrKSByZXR1cm4ga3RoIGVsZW1lbnQuIDAgaW5kZXhlZC4KLy8gWC5vcmRlcl9vZl9rZXkoaykgcmV0dXJucyBjb3VudCBvZiBlbGVtZW50cyBzdHJpY3RseSBsZXNzIHRoYW4gay4KdGVtcGxhdGU8Y2xhc3MgVD4gdXNpbmcgb3JkZXJlZF9zZXQgPSB0cmVlPFQsIG51bGxfdHlwZSwgZ3JlYXRlcjxUPixyYl90cmVlX3RhZywgdHJlZV9vcmRlcl9zdGF0aXN0aWNzX25vZGVfdXBkYXRlPjsKdGVtcGxhdGU8Y2xhc3MgVD4gdXNpbmcgb3JkZXJlZF9tdWx0aV9zZXQgPSB0cmVlPFQsIG51bGxfdHlwZSwgZ3JlYXRlcl9lcXVhbDxUPiwgcmJfdHJlZV90YWcsIHRyZWVfb3JkZXJfc3RhdGlzdGljc19ub2RlX3VwZGF0ZT47Ci8vdHlwZWRlZiB0cmVlPGludCxudWxsX3R5cGUsbGVzczxpbnQ+LHJiX3RyZWVfdGFnLHRyZWVfb3JkZXJfc3RhdGlzdGljc19ub2RlX3VwZGF0ZT4gb3JkZXJlZF9zZXQ7Ci8vdHlwZWRlZiB0cmVlPHBhaXI8bG9uZyBsb25nLGNoYXI+LG51bGxfdHlwZSxncmVhdGVyPHBhaXI8bG9uZyBsb25nLGNoYXI+PixyYl90cmVlX3RhZyx0cmVlX29yZGVyX3N0YXRpc3RpY3Nfbm9kZV91cGRhdGU+IG9yZGVyZWRfbXVsdGlzZXQ7CiNkZWZpbmUgbGwgbG9uZyBsb25nCnZvaWQgRXJhc2Uob3JkZXJlZF9tdWx0aV9zZXQ8cGFpcjxsbCxjaGFyPj4gJnMscGFpcjxsbCxjaGFyPnZhbCkgewogICAgbGwgcmFuayA9IHMub3JkZXJfb2Zfa2V5KHZhbCk7CiAgICBhdXRvIGl0ID0gcy5maW5kX2J5X29yZGVyKHJhbmspOwogICAgcy5lcmFzZShpdCk7Cn0KCnNpZ25lZCBtYWluKCkgewogICAgc3RyaW5nIHM7CiAgICBjaW4+PnM7CiAgICBsbCBuPXMuc2l6ZSgpOwogICAgbWFwPGNoYXIsbGw+bXA7CiAgICBmb3IgKGF1dG8gaTpzKW1wW2ldKys7CiAgICBsbCBtYT0wOwogICAgZm9yIChhdXRvIFt4LHldOm1wKSB7CiAgICAgICAgbWE9bWF4KG1hLHkpOwogICAgfQogICAgaWYgKG1hPm4tbWErMSkgewogICAgICAgIGNvdXQ8PCJOTyI7CiAgICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICBwcmlvcml0eV9xdWV1ZTxwYWlyPGxsLGNoYXI+PnE7CiAgICBvcmRlcmVkX211bHRpX3NldDxwYWlyPGxsLGNoYXI+PnN0OwogICAgZm9yIChhdXRvIFt4LHldOm1wKSB7CiAgICAgICAvLyBxLnB1c2goe3kseH0pOwogICAgICAgIHN0Lmluc2VydCh7eSx4fSk7CiAgICB9CiAgICBzdHJpbmcgYW5zPSIiOwogICAgd2hpbGUgKCFzdC5lbXB0eSgpKSB7CiAgICAgICAgYXV0byBbeCx5XT0qc3QuYmVnaW4oKTsKICAgICAgICBpZiAoYW5zLmVtcHR5KCkpIHsKICAgICAgICAgICAgYW5zLnB1c2hfYmFjayh5KTsKICAgICAgICAgICAgRXJhc2Uoc3Qse3gseX0pOwogICAgICAgICAgICB4LS07CiAgICAgICAgICAgIGlmICh4IT0wKSB7CiAgICAgICAgICAgICAgICBzdC5pbnNlcnQoe3gseX0pOwogICAgICAgICAgICB9CiAgICAgICAgfWVsc2UgewogICAgICAgICAgICBpZiAoYW5zWyhpbnQpYW5zLnNpemUoKS0xXSE9eSkgewogICAgICAgICAgICAgICAgYW5zLnB1c2hfYmFjayh5KTsKICAgICAgICAgICAgICAgIEVyYXNlKHN0LHt4LHl9KTsKICAgICAgICAgICAgICAgIHgtLTsKICAgICAgICAgICAgICAgIGlmICh4IT0wKSB7CiAgICAgICAgICAgICAgICBzdC5pbnNlcnQoe3gseX0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9ZWxzZSB7CiAgICAgICAgICAgICAgICBFcmFzZShzdCx7eCx5fSk7CiAgICAgICAgICAgICAgICBhdXRvIFtjLGRdPSpzdC5iZWdpbigpOwogICAgICAgICAgICAgICAgYW5zLnB1c2hfYmFjayhkKTsKICAgICAgICAgICAgICAgIEVyYXNlKHN0LHtjLGR9KTsKICAgICAgICAgICAgICAgIGMtLTsKICAgICAgICAgICAgICAgIGlmIChjIT0wKSB7CiAgICAgICAgICAgICAgICAgICAgc3QuaW5zZXJ0KHtjLGR9KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHN0Lmluc2VydCh7eCx5fSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBjb3V0PDwiWUVTXG4iOwogICAgY291dDw8YW5zPDwiXG4iOwoKCgogICAgcmV0dXJuIDA7Cn0=