#include <bits/stdc++.h>
using namespace std;
const double PI = acos(-1);
const double eps = 1e-9;
const int inf = 2000000000;
const long long infLL = 9000000000000000000;
int dx[] = {0, 0, +1, -1};
int dy[] = {+1, -1, 0, 0};
template <typename first, typename second>
ostream &operator<<(ostream &os, const pair<first, second> &p) {
  return os << "(" << p.first << ", " << p.second << ")";
}
template <typename T>
ostream &operator<<(ostream &os, const vector<T> &v) {
  os << "{";
  for (auto it = v.begin(); it != v.end(); ++it) {
    if (it != v.begin()) os << ", ";
    os << *it;
  }
  return os << "}";
}
template <typename T>
ostream &operator<<(ostream &os, const set<T> &v) {
  os << "[";
  for (auto it = v.begin(); it != v.end(); ++it) {
    if (it != v.begin()) os << ", ";
    os << *it;
  }
  return os << "]";
}
template <typename T>
ostream &operator<<(ostream &os, const multiset<T> &v) {
  os << "[";
  for (auto it = v.begin(); it != v.end(); ++it) {
    if (it != v.begin()) os << ", ";
    os << *it;
  }
  return os << "]";
}
template <typename first, typename second>
ostream &operator<<(ostream &os, const map<first, second> &v) {
  os << "[";
  for (auto it = v.begin(); it != v.end(); ++it) {
    if (it != v.begin()) os << ", ";
    os << it->first << " = " << it->second;
  }
  return os << "]";
}
void faltu() { cerr << '\n'; }
template <typename T>
void faltu(T a[], int n) {
  for (int i = 0; i < n; ++i) cerr << a[i] << ' ';
  cerr << '\n';
}
template <typename T, typename... hello>
void faltu(T arg, const hello &...rest) {
  cerr << arg << ' ';
  faltu(rest...);
}
bool vis[1001];
int ans[26];
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  ;
  char st[1002];
  scanf("%s", st + 1);
  int l = strlen(st + 1), cnt = 0;
  for (int i = 3; i <= (l / 2); i += 2) {
    if (!vis[i]) {
      vis[i] = 1;
      cnt++;
      for (int j = i * i; j <= l; j += i)
        if (!vis[j]) vis[j] = 1, cnt++;
    }
  }
  int mx = 0;
  char ch;
  for (int i = 1; i <= l; i++) {
    if (++ans[st[i] - 'a'] > mx) mx = ans[st[i] - 'a'], ch = st[i];
  }
  for (int i = 2; i <= l; i += 2) {
    if (!vis[i]) vis[i] = 1, cnt++;
  }
  if (mx >= cnt) {
    cout << "YES" << '\n';
    queue<char> q;
    for (int i = 1; i <= l; i++) {
      if (vis[i] && st[i] != ch) {
        q.push(st[i]);
        st[i] = ch;
      }
    }
    for (int i = 1; i <= l; i++) {
      if (!q.empty() && !vis[i] && st[i] == ch) {
        char c = q.front();
        q.pop();
        st[i] = c;
      }
      if (q.empty()) break;
    }
    for (int i = 1; i <= l; i++) cout << st[i];
  } else
    cout << "NO" << '\n';
  return 0;
}
