import heapq def main(): import sys input = sys.stdin.read().split() idx = 0 N = int(input[idx]) idx += 1 M = int(input[idx]) idx += 1 grid = [] for _ in range(N): row = list(map(int, input[idx:idx+N])) idx += N grid.append(row) lines_info = [] # Rows for i in range(N): cells = [] sum_line = 0 mask = 0 for j in range(N): pos = i * N + j cells.append((i, j)) sum_line += grid[i][j] mask |= 1 << pos lines_info.append((mask, sum_line, cells)) # Columns for j in range(N): cells = [] sum_line = 0 mask = 0 for i in range(N): pos = i * N + j cells.append((i, j)) sum_line += grid[i][j] mask |= 1 << pos lines_info.append((mask, sum_line, cells)) # Diagonals # Top-left to bottom-right cells = [] sum_line = 0 mask = 0 for i in range(N): j = i pos = i * N + j cells.append((i, j)) sum_line += grid[i][j] mask |= 1 << pos lines_info.append((mask, sum_line, cells)) # Top-right to bottom-left cells = [] sum_line = 0 mask = 0 for i in range(N): j = N - 1 - i pos = i * N + j cells.append((i, j)) sum_line += grid[i][j] mask |= 1 << pos lines_info.append((mask, sum_line, cells)) heap = [] visited = {} initial_mask = 0 initial_sum = 0 heapq.heappush(heap, (initial_sum, initial_mask)) visited[initial_mask] = initial_sum while heap: current_sum, current_mask = heapq.heappop(heap) if visited.get(current_mask, float('inf')) < current_sum: continue count = 0 for mask, _, _ in lines_info: if (current_mask & mask) == mask: count += 1 if count >= M: print(current_sum) return for i in range(len(lines_info)): line_mask, _, cells = lines_info[i] if (current_mask & line_mask) == line_mask: continue additional_sum = 0 for (x, y) in cells: pos = x * N + y if not (current_mask & (1 << pos)): additional_sum += grid[x][y] new_sum = current_sum + additional_sum new_mask = current_mask | line_mask if new_mask in visited: if visited[new_mask] <= new_sum: continue visited[new_mask] = new_sum heapq.heappush(heap, (new_sum, new_mask)) print(0) if __name__ == '__main__': main()