#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:16777216")
using namespace std;
int a, b, c, d, i, j, n, m, k;
char str[1002], ans[1002];
vector<int> sm[1002];
int num[1002], cnt[26], tot[1002];
inline void dfs_col(int v, int c) {
  num[v] = c;
  for (int _n(((int)((sm[v]).size())) - 1), i(0); i <= _n; i++) {
    if (num[sm[v][i]] != -1) continue;
    dfs_col(sm[v][i], c);
  }
}
inline void die() {
  printf("NO\n");
  exit(0);
}
int main() {
  scanf("%s", str);
  n = (int)strlen(str);
  for (int _n(n), i(2); i <= _n; i++) {
    bool ok = 1;
    for (int j = 2; j * j <= i; ++j) {
      if (i % j == 0) {
        ok = 0;
        break;
      }
    }
    if (!ok) continue;
    for (int j = i - 1; j < n; j += i) {
      if (j + i < n) {
        sm[j].push_back(j + i);
        sm[j + i].push_back(j);
      }
    }
  }
  memset(num, -1, sizeof(num));
  for (int _n((n)-1), i(0); i <= _n; i++) {
    if (num[i] == -1) dfs_col(i, k++);
  }
  for (int _n((n)-1), i(0); i <= _n; i++) ++tot[num[i]];
  for (int _n((n)-1), i(0); i <= _n; i++) ++cnt[str[i] - 'a'];
  a = max_element(tot, tot + k) - tot;
  b = max_element(cnt, cnt + 26) - cnt;
  if (tot[a] > cnt[b]) die();
  for (int _n((n)-1), i(0); i <= _n; i++) {
    if (num[i] == a) {
      ans[i] = b + 'a';
      --cnt[b];
    }
  }
  for (int _n((n)-1), i(0); i <= _n; i++) {
    if (num[i] == a) continue;
    for (int _n((26) - 1), j(0); j <= _n; j++)
      if (cnt[j]) {
        ans[i] = j + 'a';
        --cnt[j];
        break;
      }
  }
  printf("YES\n");
  puts(ans);
}
