覆面算を考えよう.
このパズルでは,たとえば以下のような十進表現の非負整数の足し算を扱う.
905 + 125 = 1030
覆面算では等式の中の全ての数字はアルファベットの文字で隠されている. たとえば,上で示した等式を答の一つに持つ問題には次のものがある.
ACM + IBM = ICPC
このパズルを解くということは,与えられた覆面算において 各文字が隠している数字を見つけることである.
パズルの規則は以下のとおりである.
上の覆面算における可能な数字の割り当ては, 表に示す通り4種類ある.
Mask | A | B | C | I | M | P |
---|---|---|---|---|---|---|
Case 1 | 9 | 2 | 0 | 1 | 5 | 3 |
Case 2 | 9 | 3 | 0 | 1 | 5 | 4 |
Case 3 | 9 | 6 | 0 | 1 | 5 | 7 |
Case 4 | 9 | 7 | 0 | 1 | 5 | 8 |
このパズルを解くプログラムを作成せよ.
入力は複数のデータセットからなる. 入力の終わりはゼロをひとつだけ含む行で表される.
データセットの個数は100以下である. 各データセットは次の形式で表される.
N
STRING 1
STRING 2
...
STRING N
データセットの最初の行は,等式に現れる整数の数 N を表している.
それに続く N 行はそれぞれ,'A' 〜 'Z'というアルファベット大文字から成る1個の文字列を含む. これらのアルファベット文字が隠された数字を表している.
各データセットが表しているのは次の等式である.
STRING 1 + STRING 2 + ... + STRING N -1 = STRING N
N は 3 以上 12以下の整数, 各STRING i の長さは 1 以上 8 以下である. 各データセットに現れるアルファベット文字の種類は 1以上10以下である.
等式を満たすような数字の割り当てが何通りあるかを, 各データセットに対してそれぞれ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