조니는 수학이 싫어

시간 제한5초메모리 제한128 MB

요약
주어진 합과 같아지도록 숫자열을 5자리 이하의 양의 정수로 나누되, 더하기 기호를 최소로 쓰고 그중 사전순으로 가장 앞선 식을 찾는다.
난이도

보통10점 중 7점

유형
DFS, 백트래킹, 그리디, 구현
정답자
아직 제출이 없습니다

문제

조니는 수학 과목마다 낙제를 거듭한 끝에, 반드시 통과해야 하는 보충 과목에 등록되었다. 교수에게 잘 보이려고 그는 모든 과제를 컴퓨터로 입력한다. 어떤 과제에서는 문제마다 주어진 양의 정수들을 더해 그 식을 출력해야 했는데, 예를 들면 4+12+3=19 와 같다.

그런데 프린터 오류로 더하기 기호가 모두 사라져서 이 줄이 4123=19 처럼 인쇄되었다. 여러분이 할 일은 사라진 더하기 기호를 복원하는 것이다.

복원해야 하는 각 줄은 숫자들이 이어진 문자열, 등호, 그리고 올바른 합으로 이루어진다. 원래 수들에 대해 다음 세 가지 사실을 이용할 수 있다: 모든 수는 양의 정수였고, 합을 제외한 어떤 수도 5자리를 넘지 않았으며, 어떤 수도 맨 앞자리가 0이 아니었다.

입력

입력은 한 줄에 하나씩, 하나 이상의 식으로 이루어진다. 각 줄은 숫자열=합 형식이다. 숫자열은 더하기 기호가 제거된 뒤 남은 숫자들이고, 합은 필요한 총합이다. 어떤 줄도 256자를 넘지 않는다. 입력은 0=0 줄로 끝나며, 이 줄은 종료 표시일 뿐 처리하지 않는다.

출력

각 식에 대해 주어진 순서대로 k. result 한 줄을 출력한다. 여기서 k는 1부터 시작하는 식의 번호이고, 마침표 뒤에는 공백 하나가 오며, result는 아래와 같이 정한다.

숫자열에 더하기 기호를 넣어, 각 항이 5자리 이하이고 맨 앞자리가 0이 아닌 양의 정수가 되며 그 합이 합과 같아지도록 만든다. result는 이렇게 복원한 식 숫자열=합(더하기 기호가 들어간 형태)이다. 더하기 기호는 가능한 한 적게 사용한다. 최소 개수의 더하기 기호로 복원하는 방법이 여러 가지라면, 그중 사전순으로 가장 앞서는 식 문자열을 출력한다. + 기호는 모든 숫자보다 작다고 보므로, 이는 더하기 기호가 가능한 한 왼쪽에 놓인 복원이다. 유효한 복원이 존재하지 않으면 result 자리에 IMPOSSIBLE을 출력한다.

예제3

  1. 예제 1

    입력
    4123=19
    15442147612367219875=472
    111=8
    0=0
    
    예상 출력
    1. 4+12+3=19
    2. 15+44+21+47+61+23+67+21+98+75=472
    3. IMPOSSIBLE
    
  2. 예제 2

    입력
    112=13
    0=0
    
    예상 출력
    1. 1+12=13
    
  3. 예제 3

    입력
    1000=1
    99999=99999
    0=0
    
    예상 출력
    1. IMPOSSIBLE
    2. 99999=99999