#include <bits/stdc++.h>
using namespace std;
vector<int> pr;
bool isp[1001];
void p() {
  memset(isp, true, sizeof isp);
  isp[0] = isp[1] = false;
  for (int i = 2; i < 1001; ++i) {
    if (!isp[i]) continue;
    pr.push_back(i);
    for (int j = 2 * i; j < 1001; j += i) isp[j] = false;
  }
}
int main() {
  p();
  string s;
  cin >> s;
  int n = s.length();
  bool ans = 0;
  set<int> st;
  for (int i = 0; i < pr.size(); ++i) {
    if (pr[i] > n / 2) break;
    for (int j = 1; pr[i] * j <= n; ++j) st.insert(pr[i] * j);
  }
  int cnt[26], mx = 0, ch = -1;
  memset(cnt, 0, sizeof cnt);
  for (int i = 0; i < n; ++i) {
    cnt[s[i] - 'a']++;
    if (mx < cnt[s[i] - 'a']) {
      mx = cnt[s[i] - 'a'];
      ch = s[i];
    }
  }
  if (mx >= st.size()) {
    cout << "YES" << endl;
    string ans = s;
    for (int i = 0; i < n; ++i) ans[i] = ' ';
    for (set<int>::iterator it = st.begin(); it != st.end(); ++it)
      ans[*it - 1] = ch;
    cnt[ch - 'a'] -= st.size();
    int idx = 0;
    for (int i = 0; i < 26; ++i)
      for (int j = 0; j < cnt[i]; ++j) {
        while (ans[idx] != ' ') ++idx;
        ans[idx] = i + 'a';
      }
    cout << ans << endl;
  } else
    cout << "NO" << endl;
  return 0;
}
