func_code_string: #include <bits/stdc++.h>   using namespace std;   int n;   long long k;   vector<vector<long long>> operator*(vector<vector<long long>> a,                                       vector<vector<long long>> b) {     vector<vector<long long>> ans(n, vector<long long>(n));     for (int i = 0; i < n; i++) {       for (int j = 0; j < n; j++) {         ans[i][j] = 0;         for (int k = 0; k < n; k++)           ans[i][j] = (ans[i][j] + a[i][k] * b[k][j]) % 1000000007;       }     }     return ans;   }   vector<vector<long long>> fastxp(vector<vector<long long>> a, long long e) {     if (e == 1) return a;     vector<vector<long long>> ans = fastxp(a, e / 2);     ans = (ans * ans);     if (e % 2 == 1) ans = ans * a;     return ans;   }   int sumbits(long long a) {     int sum = 0;     while (a > 0) {       sum += a % 2;       a /= 2;     }     return sum;   }   int main() {     ios::sync_with_stdio(false);     cin >> n >> k;     vector<vector<long long>> aux(n, vector<long long>(n));     vector<vector<long long>> v(n, vector<long long>(n));     for (int i = 0; i < n; i++) {       for (int j = 0; j < n; j++) {         aux[i][j] = 0;         v[i][j] = 0;       }     }     for (int i = 0; i < n; i++) v[i][0] = 1;     long long a[110];     for (int i = 0; i < n; i++) cin >> a[i];     for (int i = 0; i < n; i++) {       for (int j = 0; j < n; j++) {         if (sumbits((a[i] ^ a[j])) % 3 == 0) aux[i][j] = 1;       }     }     if (k == 1) {       cout << n << endl;       return 0;     } else {       vector<vector<long long>> ans = fastxp(aux, k - 1);       v = ans * v;       long long sum = 0;       for (int i = 0; i < n; i++) {         sum = (sum + v[i][0]) % 1000000007;       }       cout << sum << endl;     }   }   