小南最近在学习关于两个集合A和B的运算,集合运算的规则如下:
(1)A∪B:将它们所有的元素合并在一起组成的集合,记为1类数据。
(2)A∩B:两个集合共同拥有的元素所组成的集合,记为2类数据。
(3)A - B:某个元素只出现在A中但不出现在B中,记为3类数据。
(4)B - A:某个元素只出现在B中但不出现在A中,记为4类数据。
结合最近刷到的填数游戏题目,小南有了一个设计新填数游戏的想法:对于两个给定的正整数数组A和B,经过以上四种运算后会得到4个数据集合。将这4个数据集合的数据分别按照从小到大的顺序填入一个k´k的方阵中,k为奇数,满足3≤k≤51。该方阵用大写字母分割成上三角形、下三角形、左三角形和右三角形四个区域,上三角形填入1类数据、下三角形填入2类数据、左三角形填入3类数据、右三角形填入4类数据。
每一个区域填数的过程按照数据从小到大的顺序按行优先从左至右从上至下进行,如果填不满则重复该类数据从小到大的顺序填入。如果运算后的集合为空,则该类数据为0,填充数字0即可。每个数据输出占5位,右对齐。方阵大小k的选择由每一类数据的多少决定,要求每一类数据都可以全部填入且重复的数据最少。
说明:当输入的A数组元素为{1 2 4 3 5}、B数组元素为{6 7 4 2 1}时,集合运算得到的4类数为:
1类整数A∪B:{1 2 3 4 5 6 7}
2类整数A∩B:{1 2 4}
3类整数A - B:{3 5}
4类整数B - A:{6 7}
当k为7时的填充情况如图1所示,当k为9时的填充情况如图2所示。根据题目要求数据全部填入且重复的个数最少,则图1是正确的结果。
说明:图形对角线由大写字母有规律变化组成,最中间为X。每个整数和字母的输出占5位,右对齐,图形之外没有多余的空格。
现有给定的一批数组A和B,请你帮助小南编程实现输出正确的填充结果。
多个样例。每个样例输入包括三行:
第一行输入两个整数n(1≤n≤100)和m(1≤m≤100),分别表示数组A和数组B的元素个数。
第二行输入n个用空格分开的不重复的正整数x(1≤x≤1000),代表数组A的元素。
第三行输入m个用空格分开的不重复的正整数y(1≤y≤1000),代表数组B的元素。
每个样例按照填充要求输出一个正确的方阵图。输出的整数和大写字母都各占5位,右对齐。样例输出结果之间用一个空行分开。
1 1
1
1
5 5
1 2 4 3 5
6 7 4 2 1
A 1 A
0 X 0
A 1 A
C 1 2 3 4 5 C
3 B 6 7 1 B 6
5 3 A 2 A 7 6
5 3 5 X 7 6 7
3 5 A 1 A 6 7
3 B 2 4 1 B 6
C 2 4 1 2 4 C