#include <bits/stdc++.h>
using namespace std;
const long long N = 43, T = 20;
long long n, k, Mx, f[1 << T];
long long a[N];
long double A;
bool dp[1 << T];
int32_t main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cin >> n >> k;
  long long L = n / 2;
  for (long long i = 0; i < n; i++) {
    for (long long j = 0; j < n; j++) {
      bool t;
      cin >> t;
      if (!t && (j != i)) {
        a[i] ^= (1ll << j);
      }
    }
  }
  for (long long msk = 1; msk < (1 << min(L, n)); msk++) {
    long long lw = __builtin_ctz(msk);
    dp[msk] = dp[msk - (1ll << lw)];
    dp[msk] |= ((a[lw] & msk) > 0);
    if (!dp[msk]) {
      Mx = max(Mx, __builtin_popcount(msk) * 1ll);
    }
  }
  if (n < L) {
    cout << Mx;
    return 0;
  }
  for (long long i = 1; i < (1 << (n - n / 2)); i++) {
    bool ind = 0;
    long long tmp = 0;
    for (long long j = 0; j < n - n / 2; j++) {
      if (i & (1ll << j)) {
        f[i] = max(f[i], f[i - (1ll << j)]);
        if (a[j + n / 2] & ((1ll * i) << n / 2)) ind = 1;
      }
    }
    if (!ind) {
      f[i] = __builtin_popcount(i);
    }
  }
  for (long long i = 0; i < (1ll << (n / 2)); i++) {
    long long adja = 0;
    if (dp[i] == 0) {
      for (long long j = 0; j < (n / 2); j++) {
        if (i & (1ll << j)) adja |= a[j];
      }
      adja = ((1ll << n) - 1) - adja;
      adja = (adja >> (n / 2));
      Mx = max(Mx, f[adja] + __builtin_popcount(i));
    }
  }
  A = k * k;
  A /= Mx * Mx;
  A *= Mx * 1ll * (Mx - 1) / 2;
  cout << fixed << setprecision(10) << A << '\n';
  return 0;
}
