use std::io::Write; fn main() { let n = { let mut line = String::new(); std::io::stdin().read_line(&mut line).unwrap(); line.trim().parse::().unwrap() }; let mut t = vec!['a'; n]; for i in 0..n { let scores = ('a'..'z') .map(|c| { t[i] = c; let ask = t.iter().collect::(); println!("? {}", ask); std::io::stdout().flush().unwrap(); let score = { let mut line = String::new(); std::io::stdin().read_line(&mut line).unwrap(); line.trim().parse::().unwrap() }; score }) .collect::>(); if scores.iter().all(|&score| score == scores[0]) { t[i] = 'z'; } else { let pos = (0..25).max_by_key(|&pos| scores[pos]).unwrap(); t[i] = (b'a' + pos as u8) as char } } let ans = t.iter().collect::(); println!("! {}", ans); }