Problem:
Score : 200 points

Problem Statement

A string is called a KEYENCE string when it can be changed to keyence by removing its contiguous substring (possibly empty) only once.

Given a string S consisting of lowercase English letters, determine if S is a KEYENCE string.

Constraints

The length of S is between 7 and 100 (inclusive).

S consists of lowercase English letters.

Input

Input is given from Standard Input in the following format:

S

Output

If S is a KEYENCE string, print YES; otherwise, print NO.

Sample Input 1

keyofscience

Sample Output 1

YES

keyence is an abbreviation of key of science.

Sample Input 2

mpyszsbznf

Sample Output 2

NO

Sample Input 3

ashlfyha

Sample Output 3

NO

Sample Input 4

keyence

Sample Output 4

YES

Solution in Rust (1.15.1) (judge verdict: Accepted)

use std::vec::Vec;

fn read<T: std::str::FromStr>() -> T {
    let mut s = String::new();
    std::io::stdin().read_line(&mut s).ok();
    s.trim().parse().ok().unwrap()
}

fn read_vec<T: std::str::FromStr>() -> Vec<T> {
    read::<String>().split_whitespace().map(|e| e.parse().ok().unwrap()).collect()
}

fn read_touple<T: std::str::FromStr + Copy>() -> (T, T) {
  let v: Vec<T> = read_vec();
  assert_eq!(v.len(), 2);
  (v[0], v[1])
}

fn main() {
  let s: Vec<char> = read::<String>().chars().collect();
  let n = s.len();
  for w in 0..n {
    for i in 0..n-w {
      let mut x = vec![]; 
      for j in 0..n {
        if j <= i || i+w <= j {
           x.push(s[j]);
        }
      }

      if check(&x) {
        println!("YES");
        return
      }
    }  
  }
  println!("NO");
}

fn check(cs: &Vec<char>) -> bool {
  let v = vec!['k', 'e', 'y', 'e', 'n', 'c', 'e'];
  let n = v.len();
  if v.len() != cs.len() {
    return false
  }
  for i in 0..n {
    if cs[i] != v[i] {
      return false
    }
  }

  return true
}