#![allow(dead_code, unused_imports, unused_macros, non_snake_case)] fn main() { let T = read_line().parse::().unwrap(); let helloworld = "helloworld".chars().collect::>(); for _ in 0 .. T { let N = read_line().parse::().unwrap(); let S = read_line().chars().collect::>(); let mut ans = None::>; for i in 0 ..= N - 10 { if !(0 .. 10).all(|j| S[i + j] == helloworld[j] || S[i + j] == '?' ) { continue; } let mut s = S.clone(); for j in 0 .. 10 { s[i + j] = helloworld[j]; } for j in 0 .. N { if s[j] == '?' { s[j] = 'a'; } } if let Some(a) = &ans { if a.cmp(&s).is_gt() { ans = Some(s); } } else { ans = Some(s); } } if let Some(a) = ans { println!("{}", a.into_iter().collect::()); } else { println!("-1"); } } } type Int = i64; const MOD: Int = 1_000_000_007; const INF: Int = 1_000_000_000; const YESNO: [&'static str; 2] = ["Yes", "No"]; fn read_line() -> String { let mut buf = String::new(); std::io::stdin().read_line(&mut buf).ok(); buf.trim().to_string() } fn read_words() -> Vec { read_line().split_whitespace().map(str::to_string).collect() } fn yes() { println!("{}", YESNO[0]); } fn no() { println!("{}", YESNO[1]); } fn yesno(c: bool) { println!("{}", if c { YESNO[0] } else { YESNO[1] }); }