use proconio::input; fn main() { input! { _n: usize, k: usize, s: String, } let ans = solve(k, s); if let Some(ans) = ans { println!("Yes"); println!("{}", ans); } else { println!("No"); } } fn solve(k: usize, s: String) -> Option { let mut ans = String::new(); let mut stack = vec![0]; for c in s.chars() { match c { '(' => { if stack.last().map_or(false, |&i| i > 0) { ans.push('+'); } *stack.last_mut().unwrap() += 1; ans.push('('); stack.push(0); } ')' => { let i = stack.pop().unwrap(); match i { 0 => ans.push_str("1+1"), 1 => ans.push_str("+1"), _ => (), } ans.push(')'); } _ => unreachable!(), } (stack.len() >= 1).then_some(())?; ans.push(c); } (stack.len() == 1).then_some(())?; let rest = k.checked_sub(ans.chars().filter(|&c| c == '1').count())?; for _ in 0..rest { ans.push_str("+1"); } Some(ans) }