#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ld = long double;
template <typename T>
using vec = std::vector<T>;
template <typename T>
using uset = std::unordered_set<T>;
template <typename T1, typename T2>
using umap = std::unordered_map<T1, T2>;
constexpr ll INFL = 1000000000000000069;
constexpr ll INFI = 1000000069;
const ld PI = acos(-1);
std::mt19937 rnd(std::chrono::steady_clock::now().time_since_epoch().count());
vec<pair<ll, ll>> DD = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
const ll N = 42;
ll n;
ll compsub = 0;
ll g[N][N];
ll gg[N];
inline ll ppcnt(ll mask) {
  ll ans = 0;
  for (ll i = 0; i < n; i++) {
    if (mask & (1LL << i)) {
      ans++;
    }
  }
  return ans;
}
inline bool check(ll candidates, ll bad) {
  ll cnt_candidates = ppcnt(candidates);
  for (ll i = 0; i < n; i++) {
    if ((1LL << i) & bad) {
      bool ok = (gg[i] & candidates) == candidates;
      if (ok) return false;
    }
  }
  return true;
}
ll ans = 0;
void extend(ll candidates, ll bad) {
  while (candidates != 0 && check(candidates, bad)) {
    for (ll v = 0; v < n; v++) {
      if (!(candidates & (1LL << v))) continue;
      ll new_candidates = 0;
      ll new_bad = 0;
      compsub += (1LL << v);
      for (ll i = 0; i < n; i++) {
        if (i == v) continue;
        if ((candidates & (1LL << i)) && g[v][i]) {
          new_candidates += (1LL << i);
        }
        if ((bad & (1LL << i)) && g[v][i]) {
          new_bad += (1LL << i);
        }
      }
      if (!new_candidates) {
        ans = max(ans, (ll)ppcnt(compsub));
      } else {
        extend(new_candidates, new_bad);
      }
      compsub -= (1LL << v);
      candidates -= (1LL << v);
      bad += (1LL << v);
    }
  }
}
void run() {
  ld k;
  cin >> n >> k;
  vec<ll> p(n);
  iota(p.begin(), p.end(), 0);
  shuffle(p.begin(), p.end(), rnd);
  for (ll i : p) {
    for (ll j : p) {
      cin >> g[i][j];
      gg[i] += (g[i][j] << j);
    }
  }
  extend((1LL << n) - 1, 0);
  ld anss = 0;
  for (ll i = 0; i < ans; i++) {
    for (ll j = i + 1; j < ans; j++) {
      anss += (k / ans) * (k / ans);
    }
  }
  cout << fixed << setprecision(20);
  cout << anss << '\n';
}
signed main() {
  std::ios_base::sync_with_stdio(false);
  std::cin.tie(nullptr);
  ll t = 1;
  while (t--) {
    run();
  }
  return 0;
}
