func_code_string: #include <bits/stdc++.h>   using namespace std;   const int MAXN = 2097155;   int n, mS;   char s[MAXN], t[MAXN];   long long a[MAXN], b[MAXN], bt[MAXN];   inline void FWT_or(long long *F, int len, int typ) {     for (int i = 0; i < n; ++i) {       for (int S = 0; S < len; ++S) {         if (S >> i & 1) {           F[S] = F[S] + typ * F[S ^ (1 << i)];         }       }     }     return;   }   inline int popcount(int x) {     int cnt = 0;     while (x) {       x -= (x & (-x));       cnt++;     }     return cnt;   }   inline void init() {     bt[0] = 1;     for (int i = 1; i <= n; ++i) bt[i] = bt[i - 1] * 4ll;     return;   }   int main() {     scanf( %d , &n);     scanf( %s , s);     scanf( %s , t);     mS = (1 << n);     init();     for (int i = 0; i < mS; ++i) {       a[i] = (15ll & s[i]) << (popcount(i) << 1);     }     for (int i = 0; i < mS; ++i) {       b[i] = (15ll & t[i]) << (popcount(i) << 1);     }     FWT_or(a, mS, 1);     FWT_or(b, mS, 1);     for (int i = 0; i < mS; ++i) {       a[i] = a[i] * b[i];     }     FWT_or(a, mS, -1);     for (int i = 0; i < mS; ++i) printf( %lld , (a[i] >> (popcount(i) << 1) & 3));     return 0;   }   