아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

단어 덧셈

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

요약
최대 12개 단어로 이루어진 덧셈식에서 서로 다른 글자에 서로 다른 숫자를 대응시키고 앞자리 0을 허용하지 않을 때 식이 성립하는 대응의 수를 센다.
난이도

보통10점 중 7점

유형
백트래킹, 완전 탐색, 수학, 문자열
정답자
아직 제출이 없습니다

문제

단어 덧셈은 905 + 125 = 1030 처럼 덧셈식에 나오는 각 숫자를 알파벳으로 바꿔 놓은 것이다.

예를 들어 9를 A, 0을 C, 5를 M, 1을 I, 2를 B, 3을 P로 바꾸면 위 식은 아래처럼 쓸 수 있다.

ACM + IBM = ICPC

905 + 125 = 1030 의 경우, 알파벳을 다시 숫자로 되돌리는 방법은 모두 4가지이다.

방법ABCIMP
방법 1920153
방법 2930154
방법 3960157
방법 4970158

단어 덧셈이 하나 주어졌을 때, 그 식을 성립시키는 숫자 배정이 몇 가지인지 세는 프로그램을 작성하시오. 단, 다음 조건을 모두 만족해야 한다.

  1. 덧셈의 각 항은 숫자 '0'부터 '9'까지로 이루어져 있으며, 모든 숫자가 알파벳 'A'부터 'Z'까지의 문자로 바뀌어 있다.
  2. 한 알파벳은 하나의 숫자만 나타내고, 서로 다른 알파벳은 서로 다른 숫자를 나타낸다. 즉, 한 숫자에 대응하는 알파벳은 많아야 하나이다.
  3. 0을 제외한 수는 0으로 시작할 수 없다. 즉, 00 이나 0123 과 같은 표기는 허용하지 않는다. (한 자리 수 0 은 허용한다.)

입력

입력은 여러 개의 테스트 케이스로 이루어진다. 각 테스트 케이스는 다음과 같이 주어진다.

  • 첫째 줄에 단어의 개수 N이 주어진다.
  • 이어서 N개의 단어가 주어진다. 각 단어는 알파벳 'A'부터 'Z'까지의 문자로만 이루어진다.

이 N개의 단어는 (단어 1) + (단어 2) + ... + (단어 N-1) = (단어 N) 이라는 방정식을 나타낸다. 즉 마지막 단어가 앞의 모든 단어의 합과 같다.

N은 2보다 크고 13보다 작다. 각 단어의 길이는 0보다 크고 9보다 작다. 한 테스트 케이스에 등장하는 서로 다른 알파벳의 개수는 0보다 크고 11보다 작다.

입력의 마지막 줄에는 0이 하나 주어진다. 이 줄은 처리하지 않는다.

출력

각 테스트 케이스마다 그 단어 덧셈을 성립시키는 숫자 배정의 개수를 한 줄에 하나씩 출력한다.

예제4

  1. 예제 1

    입력
    3
    ACM
    IBM
    ICPC
    3
    GAME
    BEST
    GAMER
    4
    A
    B
    C
    AB
    3
    A
    B
    CD
    3
    ONE
    TWO
    THREE
    3
    TWO
    THREE
    FIVE
    3
    MOV
    POP
    DIV
    9
    A
    B
    C
    D
    E
    F
    G
    H
    IJ
    0
    
    예상 출력
    4
    1
    8
    30
    0
    0
    0
    40320
    
  2. 예제 2

    입력
    3
    ACM
    IBM
    ICPC
    0
    
    예상 출력
    4
    
  3. 예제 3

    입력
    4
    A
    B
    C
    AB
    0
    
    예상 출력
    8
    
  4. 예제 4

    입력
    3
    A
    B
    CD
    0
    
    예상 출력
    30