use proconio::{input, source::line::LineSource}; use std::{ collections::HashMap, io::{stdin, BufReader}, }; fn main() { let stdin = stdin(); let mut source = LineSource::new(BufReader::new(stdin.lock())); input! { from &mut source, n: usize, } let mut base: Vec<_> = (0..n).map(|_| 'a').collect(); for i in 0..n { let mut score = HashMap::new(); // z なし for c in 'a'..'z' { let mut t = base.clone(); t[i] = c; let text: String = t.iter().collect(); println!("? {}", text); input! { from &mut source, hit: usize, } score.insert(hit, c); } if score.len() == 1 { base[i] = 'z'; } else { let max_c = score.iter().max().unwrap(); base[i] = *max_c.1; } } let text: String = base.iter().collect(); println!("! {}", text); }