#include <bits/stdc++.h>
using namespace std;
template <class T>
using vec = vector<T>;
template <class T>
using pql = priority_queue<T, vector<T>, greater<T>>;
string debug_show(pair<int, int> a) {
  return "(" + to_string(a.first) + "," + to_string(a.second) + ")";
}
void dump_func() { cerr << endl; }
template <class Head, class... Tail>
void dump_func(Head&& head, Tail&&... tail) {
  cerr << head;
  if (sizeof...(Tail) <= 1) {
    cerr << " ";
  } else {
    cerr << ", ";
  }
  dump_func(std::move(tail)...);
}
template <typename T>
istream& operator>>(istream& is, vector<T>& vec) {
  for (T& x : vec) is >> x;
  return is;
}
template <typename T, typename U>
ostream& operator<<(ostream& os, pair<T, U>& pair_var) {
  os << "(" << pair_var.first << "," << pair_var.second << ")";
  return os;
}
template <typename T, typename U>
ostream& operator<<(ostream& os, const pair<T, U>& pair_var) {
  os << "(" << pair_var.first << "," << pair_var.second << ")";
  return os;
}
template <typename T>
ostream& operator<<(ostream& os, const vector<T>& vec) {
  os << "{";
  for (int i = 0; i < vec.size(); i++) {
    os << vec[i] << (i + 1 == vec.size() ? "" : ", ");
  }
  os << "}";
  return os;
}
template <typename T, typename U>
ostream& operator<<(ostream& os, map<T, U>& map_var) {
  os << "{";
  for (auto itr = map_var.begin(); itr != map_var.end(); itr++) {
    os << "(" << itr->first << "," << itr->second << ")";
    itr++;
    if (itr == map_var.end()) os << ", ";
    itr--;
  }
  os << "}";
  return os;
}
template <typename T>
ostream& operator<<(ostream& os, set<T>& set_var) {
  os << "{";
  for (auto itr = set_var.begin(); itr != set_var.end(); itr++) {
    os << "  " << *itr << endl;
    itr++;
    if (itr == set_var.end()) os << ", ";
    itr--;
  }
  os << "}";
  return os;
}
string YN(bool y, int id = 0) {
  if (id) cout << id;
  return (y ? "YES" : "NO");
}
string yn(bool y, int id = 0) {
  if (id) cout << id;
  return (y ? "Yes" : "No");
}
string ON(bool y, int id = 0) {
  if (id) cout << id;
  return (y ? "OK" : "NG");
}
int dir4[4][2] = {{0, -1}, {-1, 0}, {1, 0}, {0, 1}};
int dir8[8][2] = {{-1, -1}, {0, -1}, {1, -1}, {-1, 0},
                  {1, 0},   {-1, 1}, {0, 1},  {1, 1}};
char dirchar[4] = {'<', '^', '>', 'v'};
int irand(int a, int b) {
  static mt19937 Rand(static_cast<unsigned int>(time(nullptr)));
  uniform_int_distribution<int> dist(a, b - 1);
  return dist(Rand);
}
double drand(int a, int b) {
  static mt19937 Rand(static_cast<unsigned int>(time(nullptr)));
  uniform_real_distribution<double> dist(a, b);
  return dist(Rand);
}
struct Edge {
  int from, to, cost;
  bool operator<(Edge e) { return cost < e.cost; }
};
using Graph = vec<vec<Edge>>;
ostream& operator<<(ostream& os, Edge& edge) {
  os << "(" << edge.from << "->" << edge.to << ":" << edge.cost << ")";
  return os;
}
int main(void) {
  string s;
  cin >> s;
  int pos = 0;
  for (auto c : s) {
    if (pos == 0 && c == 'k')
      pos++;
    else if (pos == 1 && c == 'e')
      pos++;
    else if (pos == 2 && c == 'y')
      pos++;
    else if (pos == 3 && c == 'e')
      pos++;
    else if (pos == 4 && c == 'n')
      pos++;
    else if (pos == 5 && c == 'c')
      pos++;
    else if (pos == 6 && c == 'e')
      pos++;
  }
  cout << YN(pos == 7) << endl;
}
