变换数组
题号:NC308518
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

输入一个数组 a,包含有 n 个元素 a_1, a_2, \cdots, a_n。对这个数组进行 m 次变换,每次变换会将数组 a 中的每个元素 a_i 转换为 a_i \cdot \text{bitCount}(a_i)。其中 \text{bitCount}(x) 表示数字 x 的二进制表示中 1 出现的次数,例如 \text{bitCount}(3) = 2,因为 3 的二进制表示为 11,其中 1 出现了两次。

请输出变换之后的数组内容。

输入描述:

输入的第一行包含一个正整数 n,表示数组 a 中的元素个数。

第二行包含 n 个整数 a_1, a_2, \cdots, a_n,相邻整数之间使用一个空格分隔。

第三行包含一个整数 m,表示变换次数。

- 对于所有评测用例,1 \leq n \leq 10^30 \leq m \leq 50 \leq a_i \leq 1000

输出描述:

输出一行,包含 n 个整数,相邻整数之间使用一个空格分隔,表示变换之后得到的数组 a
示例1

输入

复制
2
5 7
2

输出

复制
20 63

说明

- 5 = (101)_27 = (111)_2,第一次变化后 a = [10, 21]
- 10 = (1010)_221 = (10101)_2,第二次变换后 a = [20, 63]