#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e3 + 10;
int fa[maxn];
int vis[maxn];
int g[maxn];
int get(int x) { return fa[x] == x ? x : (fa[x] = get(fa[x])); }
void add(int x, int y) {
  int i = get(x);
  int j = get(y);
  if (i == j) return;
  fa[i] = j;
}
bool f(int x) {
  for (int i = 2; i <= sqrt(x); i++) {
    if (x % i == 0) return false;
  }
  return true;
}
int main() {
  vector<int> v;
  char s[maxn];
  int a[30];
  memset(a, 0, sizeof a);
  scanf("%s", s);
  int len = strlen(s);
  for (int i = 0; i < len; i++) a[s[i] - 'a' + 1]++;
  int maxx = 0;
  int pa = 0;
  int ans = 0;
  for (int i = 1; i <= 26; i++) {
    if (a[i] > maxx) {
      maxx = a[i];
      pa = i;
    }
  }
  for (int i = 1; i <= len; i++) fa[i] = i;
  for (int i = 0; i < len; i++) {
    if (s[i] - 'a' + 1 != pa) v.push_back(s[i] - 'a' + 1);
  }
  for (int i = 2; i <= len; i++) {
    if (f(i)) {
      for (int j = i; j <= len; j += i) add(i, j);
    }
  }
  for (int i = 2; i <= len; i++) {
    if (get(i) == fa[2]) {
      g[i]++;
      ans++;
    }
  }
  if (ans > maxx)
    puts("NO");
  else if (len <= 3) {
    puts("YES");
    for (int i = 0; i < len; i++) printf("%c", s[i]);
  } else {
    int j = 0;
    puts("YES");
    for (int i = 0; i < len; i++) {
      if (g[i + 1])
        printf("%c", pa + 96);
      else {
        if (j >= v.size())
          printf("%c", pa + 96);
        else
          printf("%c", v[j++] + 96);
      }
    }
  }
  return 0;
}
