Problem:
Score : 100 points

Problem Statement

Ringo is giving a present to Snuke.

Ringo has found out that Snuke loves yakiniku (a Japanese term meaning grilled meat. yaki: grilled, niku: meat). He supposes that Snuke likes grilled things starting with YAKI in Japanese, and does not like other things.

You are given a string S representing the Japanese name of Ringo's present to Snuke. Determine whether S starts with YAKI.

Constraints

1 \leq |S| \leq 10

S consists of uppercase English letters.

Input

Input is given from Standard Input in the following format:

S

Output

If S starts with YAKI, print Yes; otherwise, print No.

Sample Input 1

YAKINIKU

Sample Output 1

Yes

YAKINIKU starts with YAKI.

Sample Input 2

TAKOYAKI

Sample Output 2

No

TAKOYAKI (a Japanese snack. tako: octopus) does not start with YAKI.

Sample Input 3

YAK

Sample Output 3

No

Solution in Rust (1.15.1) (judge verdict: Runtime Error)

fn main() {
  let (h,w): (usize, usize) = read_tuple();
  let mut mat: Vec<Vec<String>> = read_mat(h);
  
  let mut vec: Vec<String> = vec![];
  for line in mat.clone().as_mut_slice() {
    vec.append(&mut (line.clone()));
  }
  
  vec.sort();
  let last = vec.pop().unwrap();
  vec.push(last.clone());
  vec.push(last);
  let mut buf = vec![0; h*w];
  let mut i = 0;
  for w in vec.windows(2) {
    if w[0].as_str() != w[1].as_str() {
      buf[i] += 1;
      i += 1;
    } else {
      buf[i] += 1;
    }
  }
  
  let max = buf.iter().max().unwrap();
  let odd = buf.iter().filter(|&x| x%2 == 1).count();
  
  let ans =
    if (h*w) % 2 == 1 && (h==1 || w==1) {
      *max == 2 && odd == 1
    } else if (h*w) % 2 == 1 {
      *max == 4 && odd == 1
    } else if h==1 || w==1 {
      *max == 2 && odd == 0
    } else {
      *max == 4 && odd == 0
    };
  
  println!("{}", ans);
}

fn read_tuple<T1: std::str::FromStr, T2: std::str::FromStr>() -> (T1, T2) {
  let mut buf = String::new();
  std::io::stdin().read_line(&mut buf).ok();
  let mut it = buf.trim().split_whitespace();
  let x = it.next().unwrap().parse::<T1>().ok().unwrap();
  let y = it.next().unwrap().parse::<T2>().ok().unwrap();
  (x, y)
}

fn read_vec<T: std::str::FromStr>() -> Vec<T> {
  let mut buf = String::new();
  std::io::stdin().read_line(&mut buf).ok();
  buf.trim().split_whitespace().map(|t| t.parse::<T>().ok().unwrap()).collect()
}

fn read_mat<T: std::str::FromStr>(h: usize) -> Vec<Vec<T>> {
  let mut mat: Vec<Vec<T>> = vec![];
  for _ in 0 .. h {
    mat.push(read_vec());
  }
  mat
}