#include <bits/stdc++.h>
using namespace std;
char s[1010];
int N;
int num[30];
int prime[1010], cnt[1010], p;
int inf;
bool isprime(int k) {
  for (int i = 2; i < k; i++) {
    if (k % i == 0) {
      return false;
    }
  }
  return true;
}
char nextnum() {
  for (int i = 0; i < 26; i++) {
    if (num[i]) {
      num[i]--;
      return i + 'a';
    }
  }
}
int main() {
  gets(s);
  N = strlen(s);
  for (int i = 2; i <= 1010; i++) {
    if (isprime(i)) {
      prime[p++] = i;
    }
  }
  for (int i = 0; i < N; i++) {
    num[s[i] - 'a']++;
  }
  for (int i = 0; i < p; i++) {
    cnt[i] = N / prime[i];
  }
  int i;
  for (i = 0; i < p && 2 * prime[i] <= N; i++)
    ;
  for (int j = 1; j <= N; j++) {
    for (int k = 0; k < i; k++) {
      if (j % prime[k] == 0) {
        inf++;
        break;
      }
    }
  }
  memset(s, 0, sizeof(s));
  for (int k = 0; k <= 'z' - 'a'; k++) {
    if (num[k] >= inf) {
      cout << "YES" << endl;
      for (int j = 0; 2 * prime[j] <= N; j++) {
        for (int tmp = prime[j]; tmp <= N; tmp += prime[j]) {
          if (s[tmp] == 0) {
            s[tmp] = k + 'a';
            num[k]--;
          }
        }
      }
      for (int l = 1; l <= N; l++) {
        if (s[l] == 0) {
          s[l] = nextnum();
        }
      }
      s[N + 1] = 0;
      puts(s + 1);
      return 0;
    }
  }
  puts("NO");
  return 0;
}
