#include <bits/stdc++.h>
using namespace std;
template <class T, class U, class V>
inline bool inRange(T a, U b, V c) {
  return b <= a && a <= c;
}
template <class T>
inline T sqr(T a) {
  return a * a;
}
template <class T>
inline void MAX(T &a, T b) {
  a = max(a, b);
}
template <class T>
inline void MIN(T &a, T b) {
  a = min(a, b);
}
template <class T, class V>
pair<T, V> operator+(pair<T, V> a, pair<T, V> b) {
  return {a.first + b.first, a.second + b.second};
}
template <class T, class V>
pair<T, V> operator-(pair<T, V> a, pair<T, V> b) {
  return {a.first - b.first, a.second - b.second};
}
template <class T = int>
inline bool io(T &res) {
  static char c = ' ';
  if (c == -1) return 0;
  while (c == ' ' || c == '\n') c = getchar_unlocked();
  if (c == -1) return 0;
  res = c - '0';
  while ((c = getchar_unlocked()) && c != ' ' && c != '\n' && c != '\r' &&
         c != -1) {
    res = (res << 3) + (res << 1) + c - '0';
  }
  return 1;
}
inline string getString() {
  char buff[1000006];
  scanf("%s", buff);
  return buff;
}
inline void open(string a) {
  freopen((a + ".in").c_str(), "r", stdin);
  freopen((a + ".out").c_str(), "w", stdout);
}
inline void close() {
  fclose(stdin);
  fclose(stdout);
}
const int MAGIC_MEMSET_CONST = 63;
const int INF = 1061109567;
const long long LINF = 4557430888798830399LL;
const double DINF = numeric_limits<double>::infinity();
const int INV = -1044266559;
const long long LINV = -4485090715960753727LL;
const double DINV = -DINF;
const int MOD = (int)1e9 + 7;
const int dx[] = {1, 0, -1, 0, 1, 1, -1, -1};
const int dy[] = {0, 1, 0, -1, 1, -1, 1, -1};
int main() {
  if (!0) {
    ios_base::sync_with_stdio(false);
    std::cin.tie(0);
  }
  string x;
  cin >> x;
  for (int i = 0, j = 'a'; i < ((int)(x).size()); j += (j == x[i]), i++)
    if (x[i] > j) {
      cout << "NO" << '\n';
      return 0;
    }
  cout << "YES" << '\n';
  return 0;
}
