만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

고장난 계산기

시간 제한1초메모리 제한1024 MB

요약
덧셈과 곱셈을 같은 우선순위로 계산하는 계산기가 어떤 순서로 계산하더라도 원래 의도한 값을 내도록 괄호를 넣는 문제입니다.
난이도

보통10점 중 7점

유형
동적 계획법, 문자열, 재귀
정답자
아직 제출이 없습니다

문제

진우는 정수론 기말고사 시험에서 사용할 계산기를 구매했다. 이 계산기는 음이 아닌 정수의 덧셈과 곱셈, 그리고 괄호로 연산 순서를 지정하는 기능을 지원한다. 아래 BNF에서 <expr>에 해당하는 형태의 수식을 계산하고, 그 값을 PP로 나눈 나머지를 구할 수 있다.

  • <expr> ::= <term> | <expr> + <term>
  • <term> ::= <factor> | <term> * <factor>
  • <factor> ::= <number> | ( <expr> )
  • <number> ::= <digit> | <number> <digit>
  • <digit> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

보통의 계산기는 곱셈을 덧셈보다 먼저 계산하고, 괄호 안의 연산을 괄호 밖의 연산보다 먼저 계산한다. 우선순위가 같은 연산은 왼쪽부터 계산한다. 하지만 이 계산기는 고장났다. 덧셈과 곱셈의 우선순위를 같게 취급하며, 우선순위가 같은 연산을 임의의 순서로 계산한다. 예를 들어 (2+2*2)+3은 괄호 안의 덧셈을 먼저 계산하면 (4*2)+3 = 11이 되고, 곱셈을 먼저 계산하면 (2+4)+3 = 9가 된다.

진우는 시험 10분 전에 계산기가 고장났다는 사실을 알아챘다. 급한 대로 여는 괄호 (와 닫는 괄호 )를 적당히 추가해서, 고장난 계산기로도 항상 의도한 대로 계산되도록 수식을 입력하려 한다. 진우가 계산하려던 수식 SS가 주어질 때, 고장난 계산기가 항상 진우의 의도한 결과를 내도록 괄호를 삽입해 수식을 변환하는 프로그램을 작성하라.

입력

첫 번째 줄에 수식의 길이 NN과 법 PP가 공백을 사이에 두고 주어진다.

두 번째 줄에 진우가 계산하려던 수식 SS가 주어진다.

출력

첫 번째 줄에 변환된 수식 TT의 길이 MM을 출력한다.

두 번째 줄에 변환된 수식 TT를 출력한다.

제한

  • 1≤N≤501\le N\le 50
  • 2≤P≤202\le P\le 20
  • 1≤M≤1001\le M\le 100
  • SS와 TT는 숫자와 +, *, (, )로 이루어진 문자열이다.
  • SS는 위 BNF에서 <expr>에 해당하는 형태의 수식이다.
  • TT는 SS에 여는 괄호와 닫는 괄호만 삽입한 문자열이다.

예제2

  1. 예제 1

    입력
    9 3
    (2+2*2)+3
    
    예상 출력
    11
    (2+(2*2))+3
    
  2. 예제 2

    입력
    9 2
    (2+2*2)+3
    
    예상 출력
    9
    (2+2*2)+3