#include <bits/stdc++.h>
using namespace std;
const int base = 1000000000;
const int digit = 9;
template <typename T>
T input() {
  T ans = 0, m = 1;
  char c = ' ';
  while (!((c >= '0' && c <= '9') || c == '-')) {
    c = getchar();
  }
  if (c == '-') m = -1, c = getchar();
  while (c >= '0' && c <= '9') {
    ans = ans * 10 + (c - '0'), c = getchar();
  }
  return ans * m;
}
template <typename T>
void read(T& a) {
  a = input<T>();
}
template <typename T>
void read(T& a, T& b) {
  read(a), read(b);
}
template <typename T>
void read(T& a, T& b, T& c) {
  read(a, b), read(c);
}
template <typename T>
void read(T& a, T& b, T& c, T& d) {
  read(a, b), read(c, d);
}
template <typename X>
inline X abs(const X& a) {
  return a < 0 ? -a : a;
}
template <typename X>
inline X sqr(const X& a) {
  return a * a;
}
template <typename X>
inline X _gcd(const X& a, const X& b) {
  return (b == 0) ? a : _gcd(b, a % b);
}
template <typename A, typename B>
inline ostream& operator<<(ostream& out, const pair<A, B>& p) {
  return out << "(" << p.first << ", " << p.second << ")";
}
template <typename T>
inline ostream& operator<<(ostream& out, const vector<T>& a) {
  out << "[";
  for (int i = 0; i < int(int((a).size())); i++) {
    if (i) out << ',';
    out << ' ' << a[i];
  }
  return out << " ]";
}
template <typename T>
inline ostream& operator<<(ostream& out, const set<T>& a) {
  return out << vector<T>((a).begin(), (a).end());
}
template <typename X, typename Y>
inline ostream& operator<<(ostream& out, const map<X, Y>& a) {
  return out << vector<pair<X, Y>>((a).begin(), (a).end());
}
template <typename T>
inline ostream& operator<<(ostream& out, const pair<T*, int>& a) {
  return out << vector<T>(a.first, a.first + a.second);
}
template <typename T>
vector<T> operator+(const vector<T>& a, const vector<T>& b) {
  T nho = 0, sum = 0;
  vector<T> res;
  res.clear();
  for (int i = 0; i < max(a.size(), b.size()) || nho; ++i) {
    sum = (i < (int)a.size() ? a[i] : 0) + (i < (int)b.size() ? b[i] : 0) + nho;
    nho = sum / base;
    res.push_back(sum % base);
  }
  return res;
}
template <typename T>
vector<T> operator-(const vector<T>& a, const vector<T>& b) {
  T nho = 0, sum = 0;
  vector<T> res;
  res.clear();
  for (int i = 0; i < a.size(); ++i) {
    sum = a[i] - (i < (int)b.size() ? b[i] : 0) - nho;
    nho = (sum < 0) ? 1 : 0;
    if (sum < 0) sum += base;
    res.push_back(sum);
  }
  while (res.size() > 1 && !res.back()) res.pop_back();
  return res;
}
vector<int> a;
bool fr[26];
int main() {
  string s;
  cin >> s;
  for (int i = 0; i < s.length(); ++i)
    if (!fr[s[i] - 'a']) {
      a.push_back(s[i] - 'a');
      fr[s[i] - 'a'] = true;
    }
  for (int i = 1; i < a.size(); ++i)
    if (a[i] < a[i - 1]) {
      cout << "NO" << endl;
      return 0;
    }
  for (int i = 0; i < 25; ++i)
    if (!fr[i] & fr[i + 1]) {
      cout << "NO" << endl;
      return 0;
    }
  cout << "YES" << endl;
  return 0;
}
