#include<iostream>
#include <algorithm>
#include<string>
#include <bitset>
#include <vector>
#include <functional>
#include <climits>
#include <iomanip>
#include <utility>
#include <stack>
#include <queue>
#include <math.h>
#include <iomanip>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <numeric>
#include <stack>
typedef std::stack<int> IntStack;
typedef std::stack<char> charStack;

using namespace std;
using ll = long long;
typedef pair <int, int> pii;
int main()
{
	ll a = 0, b = 0, c = 0, d = 0, e = 0, f = 0, g = 0, h = 0, ans = 0;
	ll n;
	ll memo[1003][1003] = {};
	ll memo2[1003][1003] = {};
	char tmp;
	//ll y[1003][1003] = {};
	//ll y[100005] = {};
	//ll z[100005] = {};
	string s;
	//IntStack yStack;
	//charStack Stack;
	cin >> s;

	for (int i = 0; i < s.length(); i++)
	{
		if (a==7&&b==1)
		{
			cout << "NO" << endl;
			return 0;
		}
		if (a == 6 && b == 0 && s[i] != 'e')
		{
			b = 1;
			//while (s[i] != 'e'&&i<s.length())
			{
				//i++;
				i = s.length()-1;
			}
			i--;
		}
		else if (a == 6 && s[i] == 'e')
		{
			a++;
		}
		else if (a == 6 && b == 1 && s[i] != 'e')
		{
			cout << "NO" << endl;
			return 0;
		}
		if (a == 5 && b == 0 && s[i] != 'c')
		{
			b = 1;
			//while (s[i] != 'c'&&i<s.length())
			{
				i = s.length()-2;

			}
			i--;
		}
		else if (a == 5 && s[i] == 'c')
		{
			a++;
		}
		else if (a == 5 && b == 1 && s[i] != 'c')
		{
			cout << "NO" << endl;
			return 0;
		}
		if (a == 4 && b == 0 && s[i] != 'n')
		{
			b = 1;
			//while (s[i] != 'n'&&i<s.length())
			{
				i = s.length() - 3;

			}
			i--;
		}
		else if (a == 4 && s[i] == 'n')
		{
			a++;
		}
		else if (a == 4 && b == 1 && s[i] != 'n')
		{
			cout << "NO" << endl;
			return 0;
		}

		if (a == 3 && b == 0 && s[i] != 'e')
		{
			b = 1;
			//while (s[i] != 'e'&&i<s.length())
			{
				i = s.length() - 4;

			}
			i--;
		}
		else if (a == 3 && s[i] == 'e')
		{
			a++;
		}
		else if (a == 3 && b == 1 && s[i] != 'e')
		{
			cout << "NO" << endl;
			return 0;
		}
		if (a == 2 && b == 0 && s[i] != 'y')
		{
			b = 1;
			//while (s[i] != 'y'&&i<s.length())
			{
				i = s.length() - 5;

			}
			i--;
		}
		else if (a == 2 && s[i] == 'y')
		{
			a++;
		}
		else if (a == 2 && b == 1 && s[i] != 'y')
		{
			cout << "NO" << endl;
			return 0;
		}
		if (a == 1 && b == 0 && s[i] != 'e')
		{
			b = 1;
			//while (s[i] != 'e'&&i<s.length())
			{
				i = s.length() - 6;

			}
			i--;
		}
		else if (a == 1 && s[i] == 'e')
		{
			a++;
		}
		else if (a == 1 && b == 1 && s[i] != 'e')
		{
			cout << "NO" << endl;
			return 0;
		}
		if (a==0&&b==0&&s[i]!='k')
		{
			b = 1;
			//while (s[i]!='k'&&i<s.length())
			{
				i = s.length() - 7;

			}
			i--;
		}
		else if (a==0&&s[i]=='k')
		{
			a++;
		}
		else if (a==0&&b==1&&s[i]!='k')
		{
			cout << "NO" << endl;
			return 0;
		}
		
	}
	if (a==7)
	{
	cout << "YES" << endl;

	}
	else
	{
		cout << "NO" << endl;

	}
	return 0;
	cout << ans << endl;
	//cout << ans << endl;

	////std::cout << std::fixed;
	//cout << std::setprecision(20) << << endl;
	//cout << d+1 << endl;
	//cout << "" << endl;

	return 0;
}
//char型の文字数字は、-'0'で数値に変換できる
//accumulate(x, x + a, 0);//int型までの配列の合計
//memcpy(x, visited, sizeof(ll)*n);
//void kansuu(ll num, ll visited[10]) {}
//kansuu(1, zz);
//cout << setprecision(15) << v << endl;
//cout << char(z - 'a');
//log10(i) + 1 //10進数の桁数を取得

//int temp;
//for (int i = 0; i < n - 1; i++) {
//	for (int j = n - 1; j > i; j--) {
//		if (w[j - 1] < w[j]) {  /* 前の要素の方が大きかったら */
//			temp = w[j];        /* 交換する */
//			w[j] = w[j - 1];
//			w[j - 1] = temp;
//		}
//	}
//}

//最小公倍数
//ll x = a * b;
//ll tmp;
///* 自然数 a > b を確認・入替 */
//if (a<b) {
//	tmp = a;
//	a = b;
//	b = tmp;
//}
///* ユークリッドの互除法 */
//ll r = a % b;
//while (r != 0) {
//	a = b;
//	b = r;
//	r = a % b;
//}
//a = x / b;//答え

Measured memory_bytes: 256