func_code_string: #include <bits/stdc++.h>   using namespace std;   const int INF = 0x3f3f3f3f;   const long long int LINF = 0x3f3f3f3f3f3f3f3fll;   const long double pi = acos(-1);   const int MOD = 1e9 + 7;   int n, k;   long long int g[41];   long long int dp[(1 << 20)];   long long int dp2[(1 << 20)];   int t1, t2;   long long int Adam_Sendler() {     t1 = n / 2;     t2 = n - t1;     long long int r = 0;     for (long long int mask = 1; mask < (1ll << t1); mask++) {       for (long long int j = 0; j < t1; j++)         if (mask & (1ll << j)) {           long long int outra = mask - (1ll << j);           long long int r1 = __builtin_popcountll(dp[mask]);           long long int r2 = __builtin_popcountll(dp[outra]);           if (r2 > r1) dp[mask] = dp[outra];         }       bool click = true;       for (long long int j = 0; j < t1; j++)         if ((1ll << j) & mask)           if (((g[j] ^ mask) & mask)) click = false;       if (click) dp[mask] = mask;       long long int r1 = __builtin_popcountll(dp[mask]);       r = max(r, r1);     }     for (long long int mask = 1; mask < (1ll << t2); mask++) {       for (long long int j = 0; j < t2; j++)         if (mask & (1ll << j)) {           long long int outra = mask - (1ll << j);           long long int r1 = __builtin_popcountll(dp2[mask]);           long long int r2 = __builtin_popcountll(dp2[outra]);           if (r2 > r1) dp2[mask] = dp2[outra];         }       bool click = true;       for (long long int j = 0; j < t2; j++) {         if ((1ll << j) & mask) {           long long int m1 = g[j + t1];           long long int cara = mask << t1;           if ((m1 ^ cara) & cara) {             click = false;           }         }       }       if (click) {         dp2[mask] = mask;       }       long long int r1 = __builtin_popcountll(dp2[mask]);       if (r1 == 0)         cerr <<  mask               <<   ==   << mask << endl;       r = max(r, r1);     }     for (long long int mask = 0; mask < (1ll << t1); mask++) {       long long int tudo = (1ll << n) - 1;       for (long long int j = 0; j < t1; j++)         if ((1ll << j) & mask) tudo &= g[j];       tudo >>= t1;       long long int x = __builtin_popcountll(dp[mask]);       long long int y = __builtin_popcountll(dp2[tudo]);       r = max(r, x + y);     }     return r;   }   int main() {     scanf( %d%d , &n, &k);     for (int i = 0; i < n; i++) {       g[i] |= (1ll << i);       for (int j = 0; j < n; j++) {         int x;         scanf( %d , &x);         if (x) {           g[i] |= (1ll << j);         }       }     }     int m = Adam_Sendler();     cout << fixed << setprecision(10);     cout << (k * k * (m - 1)) / (2.0 * m) << endl;     return 0;   }   