矩阵指一个由字母组成的矩形表格,如果表格的行列相同,则称之为方阵。如果矩阵M中的元素按主对角线对称($M_{ij} = M_{ji}$ ,对每一对i 和 j).,则称之为对称方阵。
如下图:
(说明:第一个矩阵中$M_{12}=M_{21},M_{13}=M_{31},M_{23}=M_{32}$)
给定对称方阵的大小,以及它里面的所有字母。用这些字母构成一个最小的对称方阵,(不要求输出整个方阵)输出该方阵的一些子列。无解输出 "IMPOSSIBLE".
判定两个对称矩阵大小的方法是把矩阵的行连成一个字符串(由第一行到最后一行),字符串小则矩阵小。
输入:
第一行两个整数N (1 ≤ N ≤ 30000) 和 K (1 ≤ K ≤ 26). N 是方阵的大小,K是字母的种类数。
接下来K行,每行一个字母一个数字,表示字母在方阵中出现的次数,数据保证不重复,且正好$N \times N$个字母。
接下来一行一个整数 P (1 ≤ P ≤ 50), 要输出的子矩阵的列数。
最后一行P个整数,顺次给出要输出的列数。
输出:
如果有解,输出子矩阵,否则输出 "IMPOSSIBLE"(引号不输出)
注意:
60% 的数据, N 不超过 300.
80% of points, N 不超过3000.
输入:
3 3
A 3
B 2
C 4
3
1 2 3
输出:
AAB
ACC
BCC
输入:
4 4
A 4
B 4
C 4
D 4
4
1 2 3 4
输出:
AABB
AACC
BCDD
BCDD
输入:
4 5
E 4
A 3
B 3
C 3
D 3
2
2 4
输出:
AC
BE
DE
ED
输入:
4 6
F 1
E 3
A 3
B 3
C 3
D 3
4
1 2 3 4
输出:
IMPOSSIBLE
时间限制:1 s
空间限制:32 MB