func_code_string: #include <bits/stdc++.h>   using namespace std;   void __print(int x) { cerr << x; }   void __print(long x) { cerr << x; }   void __print(long long x) { cerr << x; }   void __print(unsigned x) { cerr << x; }   void __print(unsigned long x) { cerr << x; }   void __print(unsigned long long x) { cerr << x; }   void __print(float x) { cerr << x; }   void __print(double x) { cerr << x; }   void __print(long double x) { cerr << x; }   void __print(char x) { cerr <<      << x <<     ; }   void __print(const char *x) { cerr <<     << x <<    ; }   void __print(const string &x) { cerr <<     << x <<    ; }   void __print(bool x) { cerr << (x ?  true  :  false ); }   template <typename T, typename V>   void __print(const pair<T, V> &x) {     cerr <<  { ;     __print(x.first);     cerr <<  , ;     __print(x.second);     cerr <<  } ;   }   template <typename T>   void __print(const T &x) {     int f = 0;     cerr <<  { ;     for (auto &i : x) cerr << (f++ ?  ,  :   ), __print(i);     cerr <<  } ;   }   void _print() { cerr <<  ] n ; }   template <typename T, typename... V>   void _print(T t, V... v) {     __print(t);     if (sizeof...(v)) cerr <<  ,  ;     _print(v...);   }   const int maxn = 105;   int n;   long long a[maxn], k;   struct Matrix {     long long val[maxn][maxn];     Matrix() { memset(val, 0, sizeof val); }     Matrix operator*(const Matrix B) {       Matrix C;       for (int i = 1; i <= n; ++i) {         for (int j = 1; j <= n; ++j) {           for (int k = 1; k <= n; ++k) {             C.val[i][j] = (C.val[i][j] + val[i][k] * B.val[k][j]) % 1000000007;           }         }       }       return C;     }   };   Matrix Mu(Matrix A, long long b) {     Matrix C;     for (int i = 1; i <= n; ++i) C.val[i][i] = 1;     for (; b; b /= 2, A = A * A) {       if (b % 2) C = C * A;     }     return C;   }   void Solve(int Test) {     cin >> n >> k;     for (int i = 1; i <= n; ++i) {       cin >> a[i];     }     Matrix T;     for (int i = 1; i <= n; ++i) {       for (int j = 1; j <= n; ++j) {         long long x = a[i] ^ a[j];         if (__builtin_popcountll(x) % 3 == 0) T.val[i][j] = 1;       }     }     Matrix B = Mu(T, k - 1);     long long res = 0;     for (int i = 1; i <= n; ++i) {       for (int j = 1; j <= n; ++j) {         res = (res + B.val[i][j]) % 1000000007;       }     }     cout << res;   }   int main() {     ios_base::sync_with_stdio(0);     cin.tie(0), cout.tie(0);     if (fopen( CF                 .inp ,                r )) {       freopen(            CF             .inp ,            r , stdin);       freopen(            CF             .out ,            w , stdout);     }     int test = 1;     for (int i = 1; i <= test; ++i) {       Solve(i);     }   }   