#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:300000000")
using namespace std;
const double pi = 3.1415926535897932384626433832795;
template <class T>
T abs(T &a) {
  return a >= 0 ? a : -a;
};
template <class T>
T sqr(T x) {
  return x * x;
}
bool isPrime(int n) {
  for (int i = 2; i * i <= n; i++)
    if (n % i == 0) return false;
  return true;
}
string s;
vector<int> a(26);
vector<int> fix;
int getFix(int k) {
  for (int i = k - 1; i < ((int)(s).size()); i += k)
    if (fix[i] != -1) return fix[i];
  return -1;
}
int getMa() {
  int ma = 0, ind = 0;
  for (int i = 0; i < (26); i++)
    if (a[i] > ma) {
      ma = a[i];
      ind = i;
    }
  return ind;
}
int main() {
  cin >> s;
  string ans(((int)(s).size()), '?');
  for (int i = 0; i < (((int)(s).size())); i++) a[s[i] - 'a']++;
  fix.resize(((int)(s).size()), -1);
  for (int i = 2; i <= ((int)(s).size()); i++)
    if (isPrime(i)) {
      int t = getFix(i);
      if (t == -1) t = getMa();
      for (int k = i - 1; k < ((int)(s).size()); k += i)
        if (fix[k] == -1) {
          if (a[t] == 0) {
            cout << "NO";
            return 0;
          }
          a[t]--;
          fix[k] = t;
          ans[k] = t + 'a';
        }
    }
  for (int i = 0; i < (((int)(ans).size())); i++)
    if (ans[i] == '?') {
      int t = getMa();
      ans[i] = t + 'a';
      a[t]--;
    }
  cout << "YES" << endl << ans;
}
