단어 덧셈
시간 제한40초메모리 제한128 MB
최대 12개 단어로 이루어진 덧셈식에서 서로 다른 글자에 서로 다른 숫자를 대응시키고 앞자리 0을 허용하지 않을 때 식이 성립하는 대응의 수를 센다.
문제
단어 덧셈은 905 + 125 = 1030 처럼 덧셈식에 나오는 각 숫자를 알파벳으로 바꿔 놓은 것이다.
예를 들어 9를 A, 0을 C, 5를 M, 1을 I, 2를 B, 3을 P로 바꾸면 위 식은 아래처럼 쓸 수 있다.
ACM + IBM = ICPC
905 + 125 = 1030 의 경우, 알파벳을 다시 숫자로 되돌리는 방법은 모두 4가지이다.
단어 덧셈이 하나 주어졌을 때, 그 식을 성립시키는 숫자 배정이 몇 가지인지 세는 프로그램을 작성하시오. 단, 다음 조건을 모두 만족해야 한다.
- 덧셈의 각 항은 숫자 '0'부터 '9'까지로 이루어져 있으며, 모든 숫자가 알파벳 'A'부터 'Z'까지의 문자로 바뀌어 있다.
- 한 알파벳은 하나의 숫자만 나타내고, 서로 다른 알파벳은 서로 다른 숫자를 나타낸다. 즉, 한 숫자에 대응하는 알파벳은 많아야 하나이다.
- 0을 제외한 수는 0으로 시작할 수 없다. 즉, 00 이나 0123 과 같은 표기는 허용하지 않는다. (한 자리 수 0 은 허용한다.)
입력
입력은 여러 개의 테스트 케이스로 이루어진다. 각 테스트 케이스는 다음과 같이 주어진다.
- 첫째 줄에 단어의 개수 N이 주어진다.
- 이어서 N개의 단어가 주어진다. 각 단어는 알파벳 'A'부터 'Z'까지의 문자로만 이루어진다.
이 N개의 단어는 (단어 1) + (단어 2) + ... + (단어 N-1) = (단어 N) 이라는 방정식을 나타낸다. 즉 마지막 단어가 앞의 모든 단어의 합과 같다.
N은 2보다 크고 13보다 작다. 각 단어의 길이는 0보다 크고 9보다 작다. 한 테스트 케이스에 등장하는 서로 다른 알파벳의 개수는 0보다 크고 11보다 작다.
입력의 마지막 줄에는 0이 하나 주어진다. 이 줄은 처리하지 않는다.
출력
각 테스트 케이스마다 그 단어 덧셈을 성립시키는 숫자 배정의 개수를 한 줄에 하나씩 출력한다.