UOJ Logo

NOI.AC

#91. words

统计

单词异或

时间限制:1秒,内存限制:128MB 读入文件名:words.in 输出文件名:words.out

【题目描述】

计算机中对于整数有一种位运算操作,叫做异或,其运算符为“^”。

两个整数进行异或运算,实际是将两个整数的对应二进制位分别进行异或运算,得到结果的每个二进制位,从而得到两个数异或运算的结果。

而每一个二进制位的运算满足如下“同零异一”的规则:

0^0=0

0^1=1

1^0=1

1^1=0

现在我们定义如下小写字母单词异或的运算规则:

首先将小写字母表中的所有字母按顺序排列,规定“a”是字母表中的第0个字母,“b”是字母表中的第1个字母……“z”是字母表中的第25个字母。

在将两个单词进行异或运算时,若两个单词长度不同,首先在较短的单词开头补上“a”字母,直到两单词长度相等。

例如,“oi”和“acm”两个单词进行异或时,首先将“oi”补足成“aoi”,再对“aoi”和“acm”进行单词异或。

然后将这两个单词的每一个位置的字母分别进行异或运算,得到结果单词的每个位置的字母。

字母的异或运算如下定义:

对于两个字符串$A$、$B$以及$A$^$B$得到的字符串$C$,它们的的第$i$个字母:$A_i$^$B_i$=$C_i$,$A_i$和$B_i$在小写字母表中位置的差值即为结果$C_i$在小写字母表中的位置。

例如,“aoi”和“acm”异或的结果是“ame”,因为两个字符串的第一个字母都是“a”,因此在字母表中位置差为0,对应结果中第一个字母就是字母表中的第0个字母“a”;两个字符串第二个字母分别是“o”和“c”,在字母表中的位置差是12,对应结果是“m”;两个字符串第三个字母分别是“i”和“m”,在字母表中的位置差是4,对应结果是“e”。因此结果是“ame”。

现在给出$n$个字符串,求它们依次异或之后的结果。

依次异或,即两个字符串异或后得到的结果字符串再与新的字符串异或。

【输入格式】

输入包含n+1行,第一行输入一个正整数n,表示字符串数量。

接下来n行每行输入一个由小写字母构成的字符串。

【输出格式】

输出共一行,包含一个由小写字母构成的字符串,表示n个字符串异或的结果。

【输入输出样例1】

words.in

2

oi

acm

words.out

ame

【输入输出样例2】

words.in

4

a

ba

bba

bbba

words.out

baba

【数据规模与约定】

对于前20%的数据,$n=2$,$1≤$单个字符串长度$≤10$;

对于前50%的数据,$2≤n≤10$,$1≤$单个字符串长度$≤100$;

对于100%的数据,$2≤n≤100$,$1≤$单个字符串长度$≤100000$,字符串总长度$≤1000000$;