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

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

GREAT + SWERC = PORTO

시간 제한2초메모리 제한256 MB

요약
서로 다른 숫자를 각 문자에 배정해 단어 덧셈이 성립하고 맨 앞 글자가 0이 아닌 경우의 수를 셉니다.
난이도

보통10점 중 5점

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

문제

올해 포르투에서 열리는 SWERC를 잘 치르고 싶어서 여러 방법을 궁리했다. 그 가운데 하나가 대회 이름을 고전적인 SEND+MORE=MONEY 같은 낱말 덧셈 문제로 바꿔 보는 것이었다. 낱말 덧셈에서 각 글자는 0부터 9까지의 한 자리 숫자를 나타내고, 그 숫자를 대입했을 때 덧셈식이 성립해야 한다. 서로 다른 글자에는 서로 다른 숫자를 대입하며, 어떤 낱말이든 맨 왼쪽 글자는 0이 될 수 없다. 특히 글자가 하나뿐인 항도 0이 될 수 없다.

GREAT+SWERC=PORTO를 풀려면 G, S, P에 양의 숫자를 주고 R, E, A, T, W, C, O에도 숫자를 주어 모든 글자가 서로 다른 숫자를 갖고 덧셈이 맞아떨어지게 해야 한다. 해가 하나뿐인 SEND+MORE=MONEY와 달리 GREAT+SWERC=PORTO의 해는 여섯 개다.

  • T=7, E=3, W=9, G=1, A=0, P=4, S=2, C=8, R=6, O=5
  • T=7, E=3, W=9, G=2, A=0, P=4, S=1, C=8, R=6, O=5
  • T=8, E=5, W=1, G=3, A=7, P=9, S=6, C=4, R=0, O=2
  • T=8, E=5, W=1, G=6, A=7, P=9, S=3, C=4, R=0, O=2
  • T=9, E=5, W=2, G=1, A=8, P=7, S=6, C=4, R=0, O=3
  • T=9, E=5, W=2, G=6, A=8, P=7, S=1, C=4, R=0, O=3

해가 여럿이라 손으로 풀 문제로는 알맞지 않지만, 프로그램에게는 쉬운 일이다.

낱말 덧셈 문제가 주어지면 해의 개수를 구하라. 해가 하나도 없을 수도 있다.

입력

첫 줄에 정수 nn이 주어진다. 이어지는 nn개의 줄에는 낱말이 한 개씩 주어지고, 낱말의 길이는 10 이하다. 앞의 n−1n-1개는 더할 항이고 마지막 줄은 그 합이다. 낱말은 대문자로만 이루어진다. 길이가 서로 다른 낱말은 오른쪽 끝을 맞춰 정렬한 것으로 해석한다. 예를 들어 SEND+MORE=MONEY에서는 첫 낱말의 D와 둘째 낱말의 E가 마지막 낱말의 Y와 같은 자리에 온다. 마지막 낱말의 길이는 앞선 낱말 길이의 최댓값 이상이고, 한 문제에 나오는 서로 다른 글자는 10개 이하다.

출력

주어진 낱말 덧셈 문제의 해의 개수를 정수 하나로 한 줄에 출력한다.

제한

  • 3≤n≤103 \le n \le 10
  • 각 낱말의 길이는 10 이하이고 대문자로만 이루어진다.
  • 한 문제에 나오는 서로 다른 글자는 10개 이하다.

예제3

  1. 예제 1

    입력
    3
    GREAT
    SWERC
    PORTO
    
    예상 출력
    6
    
  2. 예제 2

    입력
    3
    SEND
    MORE
    MONEY
    
    예상 출력
    1
    
  3. 예제 3

    입력
    5
    TOO
    GOOD
    TO
    BE
    TRUE
    
    예상 출력
    93