func_code_string: #include <bits/stdc++.h>   using namespace std;   const int inf = (1 << 30) - 1;   const long long linf = (1ll << 62) - 1;   const int N = 200;   const int M = 1e9 + 7;   const long long M2 = 1ll * M * M;   int n;   long long a[N];   int mat[N][N];   int result[N][N];   void multiply(int a[N][N], int b[N][N]) {     static int c[N][N];     for (int i = 0; i < n; i++) {       for (int j = 0; j < n; j++) {         long long result = 0;         for (int z = 0; z < n; z++) {           result += 1ll * a[i][z] * b[z][j];           if (result >= M2) {             result -= M2;           }         }         c[i][j] = result % M;       }     }     for (int i = 0; i < n; i++) {       for (int j = 0; j < n; j++) {         a[i][j] = c[i][j];       }     }   }   void power(long long n) {     for (int i = 0; i < ::n; i++) {       result[i][i] = 1;     }     for (; n > 0; n >>= 1) {       if (n & 1) {         multiply(result, mat);       }       multiply(mat, mat);     }   }   int main() {     long long k;     cin >> n >> k;     for (int i = 0; i < n; i++) {       cin >> a[i];     }     for (int i = 0; i < n; i++) {       for (int j = 0; j < n; j++) {         long long x = a[i] ^ a[j];         int cnt = 0;         while (x > 0) {           cnt += x & 1;           x /= 2;         }         if (cnt % 3 == 0) {           mat[i][j]++;         }       }     }     power(k - 1);     int answer = 0;     for (int i = 0; i < n; i++) {       for (int j = 0; j < n; j++) {         answer += result[i][j];         if (answer >= M) {           answer -= M;         }       }     }     cout << answer << endl;     return 0;   }   