#include <bits/stdc++.h>
using namespace std;
template <typename Arg1>
void __f(const char* name, Arg1&& arg1) {
  std::cerr << name << " : " << arg1 << '\n';
}
template <typename Arg1, typename... Args>
void __f(const char* names, Arg1&& arg1, Args&&... args) {
  const char* comma = strchr(names + 1, ',');
  std::cerr.write(names, comma - names) << " : " << arg1 << " | ";
  __f(comma + 1, args...);
}
int ans = 0;
int MAXN = 1001;
vector<int> spf(1001);
void sieve() {
  spf[1] = 1;
  for (int i = 2; i < MAXN; i++) spf[i] = i;
  for (int i = 4; i < MAXN; i += 2) spf[i] = 2;
  for (int i = 3; i * i < MAXN; i++) {
    if (spf[i] == i) {
      for (int j = i * i; j < MAXN; j += i)
        if (spf[j] == j) spf[j] = i;
    }
  }
}
vector<int> getFactorization(int x) {
  vector<int> ret;
  while (x != 1) {
    ret.push_back(spf[x]);
    x = x / spf[x];
  }
  return ret;
}
signed main() {
  std::ios_base::sync_with_stdio(false);
  sieve();
  string a;
  cin >> a;
  vector<int> cnt(26, 0);
  int maxe, maxc = 0;
  for (auto& x : a) {
    cnt[x - 'a']++;
    if (maxc < cnt[x - 'a']) {
      maxc = cnt[x - 'a'];
      maxe = x - 'a';
    }
  }
  map<int, int> pos;
  for (int i = 0; i < (int)a.length(); i++) {
    if (i != 0) {
      if (i < (int)a.length() / 2) {
        pos[i] = 1;
        ans++;
      } else if ((int)getFactorization(i + 1).size() > 1) {
        pos[i] = 1;
        ans++;
      }
    }
  }
  if (maxc < ans) {
    cout << "NO";
    return 0;
  } else {
    cout << "YES" << '\n';
    cnt[maxe] -= ans;
    for (int i = 0; i < (int)a.length(); i++) {
      if (pos[i]) {
        cout << (char)(maxe + 'a');
      } else {
        int j = 0;
        while (j < 26) {
          if (cnt[j] > 0) {
            cout << (char)(j + 'a');
            cnt[j]--;
            break;
          }
          j++;
        }
      }
    }
  }
  return 0;
}
