#include <bits/stdc++.h>
using namespace std;
const int C = 20, A = 40;
int n, liq;
int dp[1 << C];
long long k[A];
int main() {
  scanf(" %d %d", &n, &liq);
  for (int i = 0; i < n; i++)
    for (int j = 0, first; j < n; j++)
      cin >> first, k[i] |= (long long)(first || i == j) << j;
  for (int i = 1; i < (1 << max(0, n - C)); i++) {
    int first = i;
    for (int j = 0; j < C; j++)
      if ((i >> j) & 1) first &= k[j + C] >> C;
    if (first == i) dp[i] = __builtin_popcount(i);
  }
  for (int i = 1; i < (1 << max(0, n - C)); i++)
    for (int j = 0; j < C; j++)
      if ((i >> j) & 1) dp[i] = max(dp[i], dp[i ^ (1 << j)]);
  int ans = 0;
  for (int i = 0; i < (1 << min(C, n)); i++) {
    int first = i, second = (1 << max(0, n - C)) - 1;
    for (int j = 0; j < min(C, n); j++)
      if ((i >> j) & 1) first &= k[j] & ((1 << C) - 1), second &= k[j] >> C;
    if (first != i) continue;
    ans = max(ans, __builtin_popcount(i) + dp[second]);
  }
  long double l = liq, a = ans;
  cout << fixed << setprecision(7) << (l * l * (a - 1)) / 2 / a << endl;
}
