#P3007. 「NOIP2004」虫食算

「NOIP2004」虫食算

Description

所谓虫食算,就是原先的算式中有一部分被虫子啃掉了,需要我们根据剩下的数字来判定被啃掉的字母。

来看一个简单的例子:

$$\begin{aligned} 43?98650?45\\ \underline{+\space\space\space\space\space8468?6633}\\ 44445506978 \end{aligned}$$

其中 ?? 代表被虫子啃掉的数字。根据算式,我们很容易判断:第一行的两个数字分别是 5533,第二行的数字是 55

现在,我们对问题做两个限制:

首先,我们只考虑加法的虫食算。这里的加法是 NN 进制加法,算式中三个数都有 NN 位,允许有前导的 00

其次,虫子把所有的数都啃光了,我们只知道哪些数字是相同的。我们将相同的数字用相同的字母表示,不同的数字用不同的字母表示。如果这个算式是 NN 进制的,我们就取英文字母表中的前 NN 个大写字母来表示这个算式中的 00N1N-1NN 个不同的数字(但是这 NN 个字母并不一定顺序地代表 00N1N-1)。输入数据保证 NN 个字母分别至少出现一次。

$$\begin{aligned} BADC\\ \underline{+\space\space{CBDA}}\\ DCCC \end{aligned}$$

上面的算式是一个4进制的算式。很显然,我们只要让 ABCDABCD 分别代表 01230123 ,便可以让这个式子成立了。

你的任务是,对于给定的 NN 进制加法算式,求出 NN 个不同的字母分别代表的数字,使得该加法算式成立。输入数据保证有且仅有一组解。

Input Format

输入文件 alpha.inalpha.in 包含 44 行:

第一行有一个正整数 NN,后面的 33 行每行有一个由大写字母组成的字符串,分别代表两个加数以及和;

33 个字符串左右两端都没有空格,从高位到低位,并且恰好有 NN 位。

Output Format

输出文件 alpha.outalpha.out 包含一行。在这一行中,应当包含唯一的那组解。

解是这样表示的:输出 NN 个数字,分别表示ABCA,B,C……所代表的数字,相邻的两个数字用一个空格隔开,不能有多余的空格。

Sample

alpha.in

5
ABCED
BDACE
EBBAA

alpha.out

1 0 3 4 2

Hint

对于30%30\% 的数据,保证有 N10N \leq 10

对于50%50\% 的数据,保证有 N15N \leq 15

对于100%100\% 的数据,保证有 N26N \leq 26