#include <bits/stdc++.h>
inline char read() {
  static const int IN_LEN = 1024 * 1024;
  static char buf[IN_LEN], *s, *t;
  if (s == t) {
    t = (s = buf) + fread(buf, 1, IN_LEN, stdin);
    if (s == t) return -1;
  }
  return *s++;
}
template <class T>
inline void R(T &x) {
  static char c;
  static bool iosig;
  for (c = read(), iosig = false; !isdigit(c); c = read()) {
    if (c == -1) return;
    if (c == '-') iosig = true;
  }
  for (x = 0; isdigit(c); c = read()) x = ((x << 2) + x << 1) + (c ^ '0');
  if (iosig) x = -x;
}
const int OUT_LEN = 1024 * 1024;
char obuf[OUT_LEN], *oh = obuf;
inline void write_char(char c) {
  if (oh == obuf + OUT_LEN) fwrite(obuf, 1, OUT_LEN, stdout), oh = obuf;
  *oh++ = c;
}
template <class T>
inline void W(T x) {
  static int buf[30], cnt;
  if (x == 0)
    write_char('0');
  else {
    if (x < 0) write_char('-'), x = -x;
    for (cnt = 0; x; x /= 10) buf[++cnt] = x % 10 + 48;
    while (cnt) write_char(buf[cnt--]);
  }
}
inline void flush() { fwrite(obuf, 1, oh - obuf, stdout); }
const int MAXN = 40;
int n, k, F, S, x, ans;
long long edge[MAXN];
int dp[1 << (MAXN / 2)];
inline void solve() {
  R(n), R(k), F = n / 2, S = n - F;
  for (int i = 0; i < n; ++i)
    for (int j = 0; j < n; ++j)
      R(x), edge[i] ^= ((long long)(x || (i == j)) << j);
  for (int i = 0; i < (1 << F); ++i) {
    int x = i, cnt = 0;
    for (int j = 0; j < F; ++j)
      if ((i >> j) & 1) cnt++, x &= (edge[j + S] >> S);
    if (x == i) dp[i] = cnt;
  }
  for (int i = 0; i < (1 << F); ++i)
    for (int j = 0; j < F; ++j)
      if ((i >> j) & 1) dp[i] = std::max(dp[i], dp[i ^ (1 << j)]);
  for (int i = 0; i < (1 << S); ++i) {
    int x = i, y = (1 << F) - 1, cnt = 0;
    for (int j = 0; j < S; ++j)
      if ((i >> j) & 1)
        cnt++, x &= edge[j] & ((1 << S) - 1), y &= (edge[j] >> S);
    if (x == i) ans = std::max(ans, cnt + dp[y]);
  }
  long double x = (long double)k / (long double)ans;
  std::cout << std::fixed << std::setprecision(10)
            << x * x * ans * (ans - 1) / 2;
}
int main() {
  solve();
  return 0;
}
