T723552 第40次CSP认证第二题:数字变换 (transform)
题目描述
小C设计了一种变换 $F$。若输入 $[0, 2^{9})$ 中的整数,则输出也是 $[0, 2^{9})$ 中的整数。
记 $\oplus$ 为按位异或运算(即 C++/Java/Python 中的 $\wedge$ 运算符)。
若 $x$, $k$ 均为 $[0, 2^{3})$ 内的整数,定义
$
f(x, k) = \big( (x^{2} + k^{2}) \bmod 2^{3} \big) \oplus k .
$
若 $x$ 为 $[0, 2^{9})$ 内的整数,$k$ 为 $[0, 2^{3})$ 内的整数。
将 $x$ 的二进制表示进行高位补零,使其恰好为 9 位。
$g(x, k)$ 将这 9 个二进制位分为高三位、中三位、低三位三组,并视为三个数字进行变换,具体如下图所示:

记 $f_0$ 为 $F$ 变换的输入值,并定义
$
f_i = g(f_{i-1}, k_i), \quad i = 1, 2, 3, \dots, m,
$
则 $f_m$ 为 $F$ 变换的输出值。
长为 $m$ 的序列 $k = (k_1, k_2, \dots, k_m)$ 是一个给定的参数序列,其中每个 $k_i$ 都是 $[0, 2^{3})$ 之间的整数。
现在小C有 $n$ 个经过 $F$ 变换后得到的值,分别为 $a_1, a_2, \dots, a_n$(每个 $a_j$ 对应某个 $f_m$)。
小C想知道它们对应的输入 $f_0$ 分别是什么。
输入格式
从标准输入读入数据。
第一行两个正整数 $n, m$。
第二行有 $m$ 个非负整数,分别为 $k_1, k_2, \dots, k_m$。
第三行有 $n$ 个非负整数,分别为 $a_1, a_2, \dots, a_n$。
输出格式
输出到标准输出。
输出一行 $n$ 个非负整数,表示 $a_1, a_2, \dots, a_n$ 对应的输入。
说明/提示
### 样例1解释
可以枚举可能的输入并验证。
若枚举到的输入为 $f_{0}=101$。
对于 $f_{1}=g(101,3)$ 来说:$a=1$,$b=4$,$c=5$,$c\oplus f(b,3)=7$,$a\oplus f(c,3)=0$,故 $f_{1}=312$。
对于 $f_{2}=g(312,5)$ 来说:$a=4$,$b=7$,$c=0$,$c\oplus f(b,5)=7$,$a\oplus f(c,5)=0$,故 $f_{2}=504$。
因此若输入为 $101$,则输出为 $504$,因此 $101$ 是其对应的输入。
如果枚举的输入是别的数字,可以同上验证其输出不是 $504$。
### 样例2
见题目目录下的 *2.in* 与 *2.ans*。
### 样例3
见题目目录下的 *3.in* 与 *3.ans*。
### 子任务
80\% 的测试数据满足:$1\le n\le 100$,$1\le m\le 20$。
100\% 的测试数据满足:$1\le n\le 5\times10^{5}$,$1\le m\le 10^{3}$,$0\le k_{i}