#Z2371. 虫食算

虫食算

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

来看一个简单的例子:

 43#9865#045
+  8468#6633
--------------
 44445509678

其中 # 号代表被虫子啃掉的数字。

根据算式,我们很容易判断:第一行的两个数字分别是 5533,第二行的数字是 55

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

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

其次,虫子把所有的数都啃光了,我们只知道哪些数字是相同的,我们将相同的数字用相同的字母表示,不同的数字用不同的字母表示。

如果这个算式是 NN 进制的,我们就取英文字母表的前 NN 个大写字母来表示这个算式中的 00N1N-1NN 个不同的数字:但是这 NN 个字母并不一定顺序地代表 00N1N-1

输入数据保证 NN 个字母分别至少出现一次。

   BADC
+  CBDA
----------
   DCCC

上面的算式是一个 44 进制的算式。

很显然,我们只要让 ABCDABCD 分别代表 01230123,便可以让这个式子成立了。

你的任务是,对于给定的 NN 进制加法算式,求出 NN 个不同的字母分别代表的数字,使得该加法算式成立。

输入数据保证有且仅有一组解。

输入格式

输入包含 44 行。

第一行有一个正整数 N(N26)N(N \le 26),后面的 33 行每行有一个由大写字母组成的字符串,分别代表两个加数以及和。

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

输出格式

输出包含一行。

在这一行中,应当包含唯一的那组解。

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

输入样例:

5
ABCED
BDACE
EBBAA

输出样例:

1 0 3 4 2