N, K = gets.split.map(&:to_i) S = gets.chomp stack = [] current = [] level = 0 S.each_char do |c| unless current puts "No" exit end case c when ?( level += 1 stack << current inner = [] current << inner current = inner when ?) level -= 1 if level < 0 puts "No" exit end current = stack.pop end end if level != 0 puts "No" exit end def dfs(ans, current) min = 0 case current.size when 0 ans << "1+1" min += 2 when 1 ans << "(" min += dfs(ans, current[0]) ans << ")+1" min += 1 else ans << "(" min += dfs(ans, current[0]) current[1 ..].each do |inner| ans << ")+(" min += dfs(ans, inner) end ans << ")" end min end ans = "" min = dfs(ans, current) if min > K puts "No" exit end puts "Yes" ans << "+1" * (K - min) puts ans