#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:1024000000,1024000000")
using namespace std;
char str[1005];
int pre[1005];
int c[26], a[1005];
bool isprime(int num) {
  for (int j = 2; j * j <= num; j++)
    if (num % j == 0) return false;
  return true;
}
int find(int x) { return pre[x] = (pre[x] == x ? x : find(pre[x])); }
int main() {
  while (scanf("%s", str) != EOF) {
    int l = strlen(str);
    if (l <= 3) {
      puts("YES");
      puts(str);
      continue;
    }
    for (int i = 1; i <= l; i++) pre[i] = i;
    for (int i = 2; i <= l; i++) {
      if (isprime(i)) {
        int ra = find(i);
        for (int j = 2; j * i <= l; j++) {
          int rb = find(i * j);
          if (ra != rb) pre[rb] = ra;
        }
      }
    }
    memset(c, 0, sizeof(c));
    memset(a, 0, sizeof(a));
    for (int i = 0; i < l; i++) c[str[i] - 'a']++;
    for (int i = 1; i <= l; i++) a[find(i)]++;
    int p = max_element(a + 1, a + 1 + l) - a, q = max_element(c, c + 26) - c;
    if (c[q] < a[p]) {
      puts("NO");
      continue;
    }
    for (int i = 1; i <= l; i++) {
      if (find(i) == p) {
        str[i - 1] = 'a' + q;
        c[q]--;
      }
    }
    for (int i = 1; i <= l; i++) {
      if (find(i) != p) {
        for (int j = 0; j < 26; j++) {
          if (c[j]) {
            c[j]--;
            str[i - 1] = 'a' + j;
            break;
          }
        }
      }
    }
    puts("YES");
    puts(str);
  }
  return 0;
}
