use std::collections::*; type Map = BTreeMap; type Set = BTreeSet; type Deque = VecDeque; fn read() -> Vec { let mut s = String::new(); std::io::stdin().read_line(&mut s).unwrap(); s.trim().split_whitespace().map(|s| String::from(s)).collect() } fn run() { let (n, m): (usize, usize) = { let a = read(); (a[0].parse().unwrap(), a[1].parse().unwrap()) }; let mut set = Set::new(); set.insert((0, 0)); let mut dfs = vec![(0, 0)]; while let Some((x, y)) = dfs.pop() { for &(x, y) in [(x - 1, y), (x + 1, y), (x, y - 1), (x, y + 1)].iter() { if x < n && y < n && !set.contains(&(x, y)) { println!("{} {}", x + 1, y + 1); let res = read(); if res[0] == "Black" { set.insert((x, y)); dfs.push((x, y)); } else if res[0] == "White" { } else { unreachable!(); } } } } if set.contains(&(n - 1, n - 1)) { println!("Yes"); } else { println!("No"); } } fn main() { run(); }