수식 만들기
시간 제한4초메모리 제한512 MB
각 (x, y)에 대해 x, +, -, *, /만으로 y가 되는 후위 표기식을 문제가 정한 구성 방식대로 출력한다.
문제

퍼즐 하나를 보자. 흔히 쓰는 수학 기호와 숫자 네 개만으로 값이 인 수식을 쓸 수 있을까?
답 하나는 다음과 같다.
여기서 !는 계승 기호이고 %는 백분율 기호다. 즉 11% = 0.11이다.
포 포스는 숫자 네 개와 흔히 쓰는 수학 기호만으로 주어진 수를 만드는 산술 퍼즐이다. 처럼 쉬운 수도 있지만, 위의 처럼 그렇지 않은 수도 있다. 네 개로 을 만들 수 있을까?
이 문제는 그 퍼즐의 변형이다. 두 정수 와 가 주어지면 다음 규칙을 지키면서 값이 인 수식을 써야 한다.
- 수식에 쓸 수 있는 상수는 정수 하나뿐이다.
- 쓸 수 있는 연산은 덧셈, 뺄셈, 곱셈, 나눗셈뿐이다.
- 수식의 연산 횟수는 번 이하다.
- 중간 결과의 절댓값은 을 넘지 않는다.
- 모든 나눗셈은 나누는 수가 0이 아니고 몫이 정수다.
규칙을 동시에 만족하는 수식은 여러 개다. 출력에서 그중 하나를 정하며, 그 수식을 출력한다.
입력
첫째 줄에 테스트 케이스의 개수 가 주어진다.
다음 개 줄에 각각 두 정수 와 가 공백을 사이에 두고 주어진다.
출력
각 테스트 케이스마다 한 줄을 출력한다.
수식은 x, +, -, *, / 다섯 문자로 이루어진 문자열, 곧 후위 표기식으로 쓴다. 빈 스택에서 시작해 문자열을 왼쪽부터 읽으며 계산한다.
x는 수 를 스택에 넣는다.+는 스택에서 두 수 와 를 이 순서로 꺼낸 다음 를 넣는다.-는 와 를 꺼낸 다음 를 넣는다.*는 와 를 꺼낸 다음 를 넣는다./는 와 를 꺼낸 다음 를 넣는다.
마지막 문자까지 읽은 뒤 스택에 수가 정확히 하나 남아야 하고, 그 수가 수식의 값이다. 연산자를 읽을 때 스택에 수가 두 개보다 적거나 끝난 뒤 수가 정확히 하나가 아니면 계산은 실패한다.
다음 규칙이 정하는 수식을 출력한다.
- 이고 이면
IMPOSSIBLE을 출력한다. - 이면
xx-를 출력한다. - 그 밖에는 뒤에
x/를 붙여 출력한다.
은 에서 정의되며, 값이 인 후위 표기식이다. 에 들어 있는 문자 x의 개수를 이라 하자. 의 기본 문자열은 x이므로 이다. 나머지 문자열은 다음 세 규칙으로 만든다.
- 곱: 이고 이면 , ,
*x/를 차례로 이어 붙인다. 문자x는 개다. - 합: 이고 이면 , ,
+를 차례로 이어 붙인다. 문자x는 개다. - 차: 이고 이면 , ,
-를 차례로 이어 붙인다. 문자x는 개다.
은 이 규칙으로 만들 수 있는 문자열의 문자 x 개수 중 가장 작은 값이고, 은 그 최솟값에 도달하는 문자열이다. 도달하는 문자열이 여럿이면 곱, 합, 차 순으로 고르고, 같은 종류 안에서는 가 가장 작은 것을 고른다. 최솟값에 도달하는 문자열의 두 조각은 언제나 과 을 만족하므로 은 모든 에서 하나로 정해진다.
이렇게 출력한 수식의 연산 횟수는 번을 넘지 않는다.