import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.StringTokenizer;



public class ELR {

	static double solveUnweighted (int nodes, long curr, long pool, long excl) {
		if (pool == 0 && excl == 0) {
			int cnt = 0;
			for (int i = 0; i < nodes; i++)
				if ((curr & 1L << i) > 0)
					cnt++;
			
			double cont = (k / (cnt*1.0));
			double edges = (cnt) * (cnt - 1) / 2.0;
			return cont * cont * edges;
		}
		double res = 0;
		int j = 0;
		for (int i = 0; i < nodes; i++)
			if ((pool & 1L << i) > 0 || (excl & 1L << i) > 0)
				j = i;

		for (int i = 0; i < nodes; i++) {
			if ((pool & 1L << i) == 0 || adj[i][j])
				continue;
			long ncurr = curr, npool = 0, nexcl = 0;
			ncurr |= 1L << i;

			for (int k = 0; k < nodes; k++) {
				if (adj[i][k]) {
					npool |= pool & 1L << k;
					nexcl |= excl & 1L << k;
				}
			}
			res = Math.max(res, solveUnweighted(nodes, ncurr, npool, nexcl));

			pool &= ~(1L << i);
			excl |= 1L >> i;
		}
		return res;
	}
	public static void main(String[] args) {new Thread(null, new Runnable() { public void run() {try {
		sol();
	} catch (Throwable e) {
		
		e.printStackTrace();
	}}}, "2",1<<26).start();}
	
	static int n,k;
	static boolean adj[][];
	public static void sol() throws Throwable {
		Scanner sc = new Scanner(System.in);
		n = sc.nextInt();
		k = sc.nextInt();
		adj = new boolean[n][n];
		for (int i = 0 ; i < n ; ++i) {
			for (int j = 0 ; j < n ; ++j) {
				adj[i][j] = sc.nextInt() == 1;
			}
		}
		double ans = solveUnweighted(n, 0, (1L << n) - 1, 0);
		System.out.println(ans);
	}


	static class Scanner {
		StringTokenizer st;
		BufferedReader br;

		public Scanner(InputStream s) {
			br = new BufferedReader(new InputStreamReader(s));
		}

		public Scanner(String s) throws FileNotFoundException {
			br = new BufferedReader(new FileReader(new File(s)));
		}

		public String next() throws IOException {
			while (st == null || !st.hasMoreTokens())
				st = new StringTokenizer(br.readLine());
			return st.nextToken();
		}

		public int nextInt() throws IOException {
			return Integer.parseInt(next());
		}

		public long nextLong() throws IOException {
			return Long.parseLong(next());
		}

		public String nextLine() throws IOException {
			return br.readLine();
		}

		public double nextDouble() throws IOException {
			return Double.parseDouble(next());
		}

		public boolean ready() throws IOException {
			return br.ready();
		}
	}
}