#![allow(non_snake_case, unused_imports)] use std::cmp::Reverse; use std::collections::{BinaryHeap, HashMap, HashSet}; use proconio::{input, marker::Usize1, marker::Chars}; use itertools::Itertools; #[allow(unused_macros)] macro_rules! d { ( $( $x:expr ),* $(,)? ) => { eprintln!( concat!( $( stringify!($x), "={:?} " ),* ), $( $x ),* ); }; } #[allow(dead_code)] fn yn(b: bool) -> &'static str { if b { "Yes" } else { "No" } } fn replace_first(s: &str, fm: char, to: &str) -> String { let mut res = String::new(); let mut b = false; for c in s.chars() { if !b && c == fm { res.push_str(to); b = true; } else { res.push(c) } } res } fn solve() -> String { input! { R: String, S: String, K: usize, } let prefix_count = |c: char| -> usize { R.chars() .take(K) .filter(|&x| x == c) .count() }; let suffix_count = |c: char| -> usize { R.chars() .skip(K) .filter(|&x| x == c) .count() }; if S == "NotWarong" { let prefix_all_a = prefix_count('A') == K; let suffix_all_a = suffix_count('A') == R.len() - K; let prefix_has_w = prefix_count('W') > 0; let suffix_has_w = suffix_count('W') > 0; if prefix_all_a { return R.replace('?', "A"); } if suffix_has_w { let a = prefix_count('A'); let q = prefix_count('?'); if a == K-1 && q == 1 { return replace_first(&R, '?', "W"); } return R; } return R; } let freq = R.chars().skip(K as usize).counts(); let qcnt = *freq.get(&'?').unwrap_or(&0); let wcnt = *freq.get(&'W').unwrap_or(&0); let mut s = String::new(); for _ in 0..K { s.push('A'); } let cs: Vec = R.chars().collect(); for i in K as usize..R.len() { if cs[i] == '?' && qcnt == 1 && wcnt == 0 { s.push('W'); } else { s.push(cs[i]); } } s } fn main() { input! { T: usize, } for _ in 0..T { let ans = solve(); println!("{}", ans); } }