만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

Trans

시간 제한2초메모리 제한512 MB

요약
길이가 2^n인 배열 a가 주어질 때, 각 i마다 i AND j의 popcount가 홀수인 모든 j에 대해 a_j를 더한 값을 구합니다.
난이도

보통10점 중 5점

유형
비트 연산, 분할 정복
정답자
아직 제출이 없습니다

문제

밥은 팝카운트(popcount)와 특이한 변환에 관심이 있다. 현재 그는 다음 문제를 풀고 있다.

길이가 2n2^n인 정수 배열 a0,a1,a2,…,a2n−1a_0,a_1,a_2,\ldots,a_{2^n-1}이 있다. 각 ii (0≤i≤2n−10 \le i \le 2^n-1)에 대해 아래 값 bib_i를 구하라.

bi=∑j=02n−1(popcount⁡(iand⁡j) mod 2)⋅ajb_i=\sum_{j=0}^{2^n-1} (\operatorname{popcount}(i \operatorname{and} j) \bmod 2) \cdot a_j

여기서 popcount⁡(x)\operatorname{popcount}(x)는 xx를 이진수로 나타냈을 때 1의 개수이고, and⁡\operatorname{and}는 비트 AND 연산이다.

밥은 아주 똑똑하지만 이 문제를 빠르게 풀지 못한다. 모든 bib_i를 계산하는 것을 도와주겠는가?

입력

첫 줄에 정수 nn (1≤n≤201 \le n \le 20)이 주어진다.

둘째 줄에는 배열 aa를 나타내는 2n2^n개의 정수가 주어진다 (1≤ai≤1091 \le a_i \le 10^9).

출력

2n2^n개의 정수를 한 줄에 출력한다. ii번째 수는 bib_i이다.

예제1

  1. 예제 1

    입력
    2
    1 2 3 4
    
    예상 출력
    0 6 7 5