use itertools::Itertools; use proconio::{input, marker::Chars}; fn main() { input! { t: usize, } for _ in 0..t { input! { r: Chars, s: String, k: usize, } let front = r[0..k].iter().copied().collect_vec(); let front_cnt = front.len(); let front_q_cnt = front.iter().filter(|&&c| c == '?').count(); let front_a_cnt = front.iter().filter(|&&c| c == 'A').count(); let front_w_cnt = front.iter().filter(|&&c| c == 'W').count(); let back = r[k..].iter().copied().collect_vec(); let back_q_cnt = back.iter().filter(|&&c| c == '?').count(); let back_w_cnt = back.iter().filter(|&&c| c == 'W').count(); match s.as_str() { "Warong" => { let replacing_w = back_w_cnt == 0 && back_q_cnt == 1; let mut ans = vec![]; ans.extend(std::iter::repeat_n('A', front_cnt)); ans.extend( back.iter() .map(|&c| if replacing_w && c == '?' { 'W' } else { c }), ); println!("{}", ans.iter().join("")); } "NotWarong" => { if front_a_cnt == front_cnt { let replacing_a = back_w_cnt == 0 && back_q_cnt == 1; let mut ans = vec![]; ans.extend(std::iter::repeat_n('A', front_cnt)); ans.extend( back.iter() .map(|&c| if replacing_a && c == '?' { 'A' } else { c }), ); println!("{}", ans.iter().join("")); } else if back_w_cnt != 0 && front_q_cnt == 1 && front_w_cnt == 0 { let mut ans = vec![]; ans.extend(front.iter().map(|&c| if c == '?' { 'W' } else { c })); ans.extend(back); println!("{}", ans.iter().join("")); } else { println!("{}", r.iter().join("")); } } _ => unreachable!(), } } }