#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;
}
