func_code_string: #include <bits/stdc++.h>   using namespace std;   long long wph;   long long mul(long long a, long long b) {     long long c = (a * b - (long long)((long double)a / wph * b) * wph);     return c < 0 ? c + wph : c;   }   void fwt(long long *a, int n, int f) {     for (int k = 2, mid = 1; k <= n; k <<= 1, mid <<= 1)       for (int i = 0; i < n; i += k)         for (int j = 0; j < mid; j++) {           long long x = a[i + j], y = a[i + mid + j];           a[i + j] = (x + y) % wph, a[i + mid + j] = (x - y + wph) % wph;         }     if (f)       for (int i = 0; i < n; i++) a[i] /= n;   }   long long c[2000010], b[2000010], f[2000010];   long long ksm(long long bs, long long mi) {     long long ans = 1;     while (mi) {       if (mi & 1) ans = mul(ans, bs);       bs = mul(bs, bs);       mi >>= 1;     }     return ans;   }   long long count(long long x) {     long long cnt = 0;     while (x) x &= (x - 1), cnt++;     return cnt;   }   int main() {     long long t;     int m, n;     scanf( %d%I64d%I64d , &m, &t, &wph);     n = 1 << m;     wph *= n;     for (int i = 0; i < n; i++) scanf( %I64d , &f[i]);     for (int i = 0; i <= m; i++) scanf( %I64d , &b[i]);     for (int i = 0; i < n; i++) c[i] = b[count(i)];     fwt(c, n, 0);     fwt(f, n, 0);     for (int i = 0; i < n; i++) c[i] = ksm(c[i], t);     for (int i = 0; i < n; i++) c[i] = mul(c[i], f[i]);     fwt(c, n, 1);     wph /= n;     for (int i = 0; i < n; i++) printf( %I64d n , c[i] % wph);     return 0;   }   