矩阵是一个由字母组成的矩形表格。方阵是行数和列数相等的矩阵。如果一个方阵 $M$ 的字母关于主对角线对称(即对于所有 $i$ 和 $j$ 的组合,都有 $M_{ij} = M_{ji}$),则称其为对称矩阵。
下图展示了两个对称矩阵和一个非对称矩阵:
两个对称矩阵。两个非对称矩阵。
给定一组可用的字母,你需要输出由这些字母组成的所有可能的对称矩阵中,字典序最小的那个矩阵的指定列子集。
如果不存在这样的矩阵,输出 "IMPOSSIBLE"。
为了确定矩阵 $A$ 是否在字典序上小于矩阵 $B$,我们将它们的元素按行优先顺序(即像将所有行拼接成一个长字符串一样)进行比较。如果两个矩阵出现不同的第一个元素在 $A$ 中较小,则称 $A$ 在字典序上小于 $B$。
输入格式
第一行包含两个整数 $N$ ($1 \le N \le 30000$) 和 $K$ ($1 \le K \le 26$)。$N$ 是矩阵的维度,而 $K$ 是将要出现的不同字母的数量。
接下来的 $K$ 行,每行包含一个大写字母和一个正整数,中间用空格隔开。该整数表示需要使用多少个对应的字母。例如,如果某一行是 "A 3",则字母 A 必须在输出矩阵中恰好出现三次。
字母的总数将恰好为 $N^2$。输入中每个字母最多出现一次。
下一行包含一个整数 $P$ ($1 \le P \le 50$),表示需要输出的列数。
最后一行包含 $P$ 个整数,表示需要输出的列的索引。这些索引在 $1$ 到 $N$ 之间(包含边界),按递增顺序给出,且不重复。
输出格式
如果可以使用给定的字母集合组成一个对称矩阵,则在 $N$ 行中输出所需的列,每行包含 $P$ 个字符,不含空格。否则,输出 "IMPOSSIBLE"(不含双引号)。
子任务
- 在占总分 60% 的测试数据中,$N$ 最多为 300。
- 在占总分 80% 的测试数据中,$N$ 最多为 3000。
样例
输入样例 1
3 3 A 3 B 2 C 4 3 1 2 3
输出样例 1
AAB ACC BCC
输入样例 2
4 4 A 4 B 4 C 4 D 4 4 1 2 3 4
输出样例 2
AABB AACC BCDD BCDD
输入样例 3
4 5 E 4 A 3 B 3 C 3 D 3 2 2 4
输出样例 3
AC BE DE ED
输入样例 4
4 6 F 1 E 3 A 3 B 3 C 3 D 3 4 1 2 3 4
输出样例 4
IMPOSSIBLE