#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")
#include <iostream>

using namespace std;

const unsigned int MOD = 998244353;

// Đưa về mảng 1 chiều x 24 để tận dụng thanh ghi AVX2 (256-bit = 8 số int x 3)
// Đảo chiều mảng thành f[mask][k] để tối ưu Cache locality
alignas(32) unsigned int f[1 << 20][24]; 

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    
    freopen("tamphan.inp" , "r" , stdin);
    freopen("tamphan.out" , "w" , stdout);
    
    int n;
    if (!(cin >> n)) return 0;

    int size = 1 << n;
    for (int i = 0; i < size; ++i) {
        unsigned int val;
        cin >> val;
        f[i][__builtin_popcount(i)] = val;
    }

    // 1. FMT / SOS DP
    for (int len = 1; len < size; len <<= 1) {
        for (int i = 0; i < size; i += 2 * len) {
            for (int j = 0; j < len; ++j) {
                unsigned int *u = f[i + j];
                unsigned int *v = f[i + len + j];
                for (int k = 0; k <= n; ++k) {
                    unsigned int sum = v[k] + u[k];
                    // Phép cộng không nhánh (branchless) thay cho modulo
                    v[k] = (sum >= MOD) ? sum - MOD : sum;
                }
            }
        }
    }

    // 2. Nhân chập đa thức (Tính trực tiếp không cần mảng h)
    for (int mask = 0; mask < size; ++mask) {
        unsigned int* fm = f[mask];
        unsigned long long P[24] = {0};
        
        // Tính f * f
        for (int i = 0; i <= n; ++i) {
            unsigned long long fi = fm[i];
            if (!fi) continue;
            for (int j = 0; i + j <= n; ++j) {
                P[i + j] += fi * fm[j];
            }
            // Mẹo siêu tốc độ: Modulo sau 16 vòng lặp để tránh uint64_t bị tràn
            // Thay vì modulo sau mỗi vòng bên trong, tiết kiệm hàng triệu phép tính
            if (i == 15) {
                for (int k = 0; k <= n; ++k) P[k] %= MOD;
            }
        }
        for (int k = 0; k <= n; ++k) P[k] %= MOD;
        
        // Tính (f * f) * f
        unsigned long long H[24] = {0};
        for (int i = 0; i <= n; ++i) {
            unsigned long long pi = P[i];
            if (!pi) continue;
            for (int j = 0; i + j <= n; ++j) {
                H[i + j] += pi * fm[j];
            }
            if (i == 15) {
                for (int k = 0; k <= n; ++k) H[k] %= MOD;
            }
        }
        
        // Cập nhật lại mảng f (In-place)
        for (int k = 0; k <= n; ++k) fm[k] = H[k] % MOD;
    }

    // 3. IFMT / Inverse SOS DP
    for (int len = 1; len < size; len <<= 1) {
        for (int i = 0; i < size; i += 2 * len) {
            for (int j = 0; j < len; ++j) {
                unsigned int *u = f[i + j];
                unsigned int *v = f[i + len + j];
                for (int k = 0; k <= n; ++k) {
                    unsigned int diff = v[k] + MOD - u[k];
                    v[k] = (diff >= MOD) ? diff - MOD : diff;
                }
            }
        }
    }

    // 4. In ra kết quả
    for (int i = 0; i < size; ++i) {
        cout << f[i][__builtin_popcount(i)] << (i == size - 1 ? "" : " ");
    }
    cout << "\n";

    return 0;
}
