Informatica Online Judge

  복면산 [1340 / 053C]

Time Limit(Test case) : 1000(ms)
Number of users who solved : 10   Total Tried : 83


The Champion of this Problem (C++) : N/A
My Best Submission (C++) : N/A

[1998 영국정올]

Background

복면산은 문자를 숫자로 바꾸어 계산하는 것이다. 각 문자는 식을 통해서 동일한 숫자로 변환되며, 어떠한 문자도 동시에 두 개 이상의 숫자를 표현할 수 없다.

또한 변환된 임의의 수의 제일 왼쪽자리는 0이 될 수도 없다. 매번 문제를 해결할 때마다 문자와 숫자의 매칭은 재구성할 수 있다.

전통적인 퍼즐의 예는 "SEND + MORE = MONEY"이다. 이것의 유일한 해법은 "9567 + 1085 = 10652"이다.

제일 왼쪽 숫자가 0이 될 수 없다는 제한은 매우 중요한데, 예를 들면, 8542 + 0915 = 09457은 올바른 해법이 아니라는 것이다.

주어진 복면산을 풀 수 있는 프로그램을 작성하시오,

단, 해가 여러 개라면 다음 순위에 따라 구하면 된다.

합을 오름차순으로 한다. 단, 합이 동일할 경우, 1~(n-1)번째 수를 오름차순으로 한다.

Input

첫 번째 줄은 입력받을 단어의 개수인 n을 입력 받는다. ( 단, 3<=n<=6 )

그 다음 줄부터 10글자 이하의 단어를 입력받는다.

첫 번째 문자열부터 n-1번째 문자열의 합이 n이라는 의미이다.

즉, 1 + 2 + ... n-1 = n 이 되는 값을 찾는다.

Output

가능한 모든 예를 한 줄에 하나씩 출력한다.

출력결과가 여러 줄일 경우에 복면산 연산의 결과로 구한 합의 크기를 오름차순으로 출력한다.

마지막으로 만약 풀 수 없다면 "Impossible"이라고 출력하고, 복면산을 풀 수 있는 방법이 유일하다면 "Unique"를 출력한다.

IO Example

입력
3
SEND
MORE
MONEY

출력
9567 + 1085 = 10652
Unique

Submit : [C/C++] | [C++11] | [Obj-C] | [Java] | [Python]
Prob Analysis : [Problem Statistics] | [Solution]