Problem: 

Input

The input consists of a single string of uppercase letters A-Z. The length of the string is between 1 and 10 characters, inclusive.

Output

Output "YES" or "NO".

Examples

Input


GENIUS


Output


YES


Input


DOCTOR


Output


NO


Input


IRENE


Output


YES


Input


MARY


Output


NO


Input


SMARTPHONE


Output


NO


Input


REVOLVER


Output


YES


Input


HOLMES


Output


NO


Input


WATSON


Output


YES

Solution (in CPP):

Solution:
#include <bits/stdc++.h>
using namespace std;
const int infi = 1e9;
const long long int infl = 1e18;
const int MOD = 1e9 + 7;
long long int log_2(long long int n) {
  return (n > 1ll) ? 1ll + log_2(n / 2) : 0ll;
}
inline void add(long long int &a, long long int b) {
  a += b;
  if (a >= MOD) a -= MOD;
}
inline void sub(long long int &a, long long int b) {
  a -= b;
  if (a < 0) a += MOD;
}
inline string IntToString(long long int a) {
  char x[100];
  sprintf(x, "%lld", a);
  string s = x;
  return s;
}
inline long long int StringToInt(string a) {
  char x[100];
  long long int res;
  strcpy(x, a.c_str());
  sscanf(x, "%lld", &res);
  return res;
}
inline string GetString(void) {
  char x[1000005];
  scanf("%s", x);
  string s = x;
  return s;
}
inline string uppercase(string s) {
  int n = (int)s.size();
  for (int(i) = (0); (i) < (n); ++(i))
    if (s[i] >= 'a' && s[i] <= 'z') s[i] = s[i] - 'a' + 'A';
  return s;
}
inline string lowercase(string s) {
  int n = (int)s.size();
  for (int(i) = (0); (i) < (n); ++(i))
    if (s[i] >= 'A' && s[i] <= 'Z') s[i] = s[i] - 'A' + 'a';
  return s;
}
inline void OPEN(string s) {
  freopen((s + ".in").c_str(), "r", stdin);
  freopen((s + ".out").c_str(), "w", stdout);
}
void showarr(long long int arr[], long long int n) {
  int i;
  for (i = 0; i < n; i++) {
    cout << arr[i] << " ";
  }
  cout << endl;
}
void showvec(vector<long long int> v) {
  int i;
  for (i = 0; i < v.size(); i++) {
    cout << v[i] << " ";
  }
  cout << endl;
}
int isPalindrome(string str) {
  int l = 0;
  int h = str.length() - 1;
  while (h > l) {
    if (str[l++] != str[h--]) {
      return 0;
    }
  }
  return 1;
}
void showvecpair(vector<pair<long long int, long long int> > v) {
  for (int i = 0; i < (int)v.size(); i++) {
    cout << v[i].first << " " << v[i].second << endl;
  }
}
bool sortbysec(const pair<long long int, long long int> &a,
               const pair<long long int, long long int> &b) {
  return (a.second < b.second);
}
void bin(unsigned n) {
  unsigned i;
  for (i = 1 << 31; i > 0; i = i / 2) (n & i) ? printf("1") : printf("0");
}
long long int cntset(long long int n) {
  bitset<64> b1(n);
  return b1.count();
}
long long int p[100005];
void seive() {
  long long int i, j;
  for (i = 0; i < 100005; i++) p[i] = i;
  for (i = 2; i <= sqrt(100005); i++) {
    if (p[i] != i) continue;
    for (j = i * i; j < 100005; j += i) {
      if (p[j] == j) p[j] = i;
    }
  }
  return;
}
long long int power(long long int n, long long int x) {
  long long int j = n, prod = 1;
  while (x) {
    if (x % 2) {
      prod = ((prod % MOD) * (j % MOD)) % MOD;
    }
    j = (j * j) % MOD;
    x = x / 2;
  }
  return prod;
}
long long int fact(long long int n) {
  long long int i, prod = 1;
  for (i = 1; i <= n; i++) {
    prod = (prod * i) % MOD;
  }
  return prod;
}
void solve() {
  long long int a, b, c, d, x, y, n, m, k, l, i, j,
      Max = INT_MIN, Min = INT_MAX, ctr = 0, cnt = 0, ans = 0;
  string s;
  cin >> s;
  for (i = 2; i < s.length(); i++) {
    if ((s[i - 1] - 'A' + 1 + (s[i - 2] - 'A' + 1) - 1) % 26 !=
        s[i] - 'A' + 1) {
      ctr = -1;
      break;
    }
  }
  if (ctr == -1)
    cout << "NO" << endl;
  else
    cout << "YES" << endl;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  int i, T;
  T = 1;
  for (i = 1; i <= T; i++) {
    solve();
  }
  return 0;
}