格雷码(Gray codes)是信息论中的一个经典课题,有着许多实际应用,但本题并不涉及这些应用。一个 $n$ 位格雷码是所有 $n$ 位二进制字符串的一个排列 $(x_1, x_2, \dots, x_{2^n})$,其性质是任意相邻的两个字符串恰好有 1 位不同。更正式地说,对于每个 $1 \le i < 2^n$,都有 $d(x_i, x_{i+1}) = 1$,其中 $d(\cdot, \cdot)$ 表示两个二进制字符串之间的汉明距离。例如,当 $n = 3$ 时,序列 $(000, 001, 011, 010, 110, 111, 101, 100)$ 就是一个格雷码。
Picture by designmilk on Flickr, cc by-sa
虽然格雷码很棒,但它们也有点……“灰”色调。在本题中,我们来看一个更加丰富多彩的变体。
对于整数 $n \ge 1$ 和整数集合 $P \subseteq \{1, \dots, n\}$,如果所有 $n$ 位二进制字符串的一个排列 $(x_1, \dots, x_{2^n})$ 满足对于所有 $1 \le i < 2^n$,都有 $d(x_i, x_{i+1}) \in P$(即任意相邻两个字符串差异的位数都在 $P$ 中),则称该排列为具有调色板 $P$ 的 $n$ 位彩色码。
注意,对于某些调色板,彩色码可能不存在。例如,如果 $n = 6$ 且 $P = \{6\}$,则第二个字符串必须是第一个字符串的按位取反,但这样第三个字符串必须是第二个字符串的取反,即等于第一个字符串。
给定 $n$ 和 $P$,你能构造出一个具有调色板 $P$ 的 $n$ 位彩色码吗?
输入格式
输入的第一行包含两个整数 $n$ ($1 \le n \le 16$) 和 $p$ ($1 \le p \le n$)。接下来一行包含 $p$ 个不同的整数 $s_1, \dots, s_p$ ($1 \le s_i \le n$,对于每个 $i$),即 $P$ 中的元素。
输出格式
如果存在具有调色板 $P$ 的 $n$ 位彩色码,请输出 $2^n$ 行,按顺序包含该代码的元素。如果存在多种不同的代码,输出其中任意一个即可。如果不存在这样的代码,输出 “impossible”。
样例
输入格式 1
6 1 6
输出格式 1
impossible
输入格式 2
3 1 1
输出格式 2
000 001 011 010 110 111 101 100
输入格式 3
4 2 3 2
输出格式 3
0110 1101 1011 0001 0111 1100 1001 0000 0101 0011 1111 1010 0100 1000 0010 1110