Masha lives in a country with n cities numbered from 1 to n. She lives in the city number 1. 

There is a direct train route between each pair of distinct cities i and j, where i ≠ j. In total there are n(n-1) distinct routes. Every route has a cost, cost for route from i to j may be different from the cost of route from j to i.

Masha wants to start her journey in city 1, take exactly k routes from one city to another and as a result return to the city 1. Masha is really careful with money, so she wants the journey to be as cheap as possible. To do so Masha doesn't mind visiting a city multiple times or even taking the same route multiple times.

Masha doesn't want her journey to have odd cycles. Formally, if you can select visited by Masha city v, take odd number of routes used by Masha in her journey and return to the city v, such journey is considered unsuccessful.

Help Masha to find the cheapest (with minimal total cost of all taken routes) successful journey.

Input

First line of input had two integer numbers n,k (2 ≤ n ≤ 80; 2 ≤ k ≤ 10): number of cities in the country and number of routes in Masha's journey. It is guaranteed that k is even.

Next n lines hold route descriptions: j-th number in i-th line represents the cost of route from i to j if i ≠ j, and is 0 otherwise (there are no routes i → i). All route costs are integers from 0 to 10^8.

Output

Output a single integer — total cost of the cheapest Masha's successful journey.

Examples

Input


5 8
0 1 2 2 0
0 0 1 1 2
0 1 0 0 0
2 1 1 0 0
2 0 1 2 0


Output


2


Input


3 2
0 1 1
2 0 1
2 2 0


Output


3
#include <bits/stdc++.h>
using namespace std;
mt19937 rnd(time(0));
const int N = 100;
int e[N][N];
int color[N];
int dp[N][15];
int main() {
  int n, k;
  scanf("%d%d", &n, &k);
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n; j++) {
      scanf("%d", &e[i][j]);
    }
  }
  int ans = 1 << 30;
  int T = 3000;
  for (int x = 1; x <= T; x++) {
    for (int i = 1; i <= n; i++) {
      color[i] = rnd() % 2;
      if (i == 1)
        dp[i][0] = 0;
      else
        dp[i][0] = 1 << 30;
    }
    for (int i = 1; i <= k; i++) {
      for (int j = 1; j <= n; j++) {
        dp[j][i] = 1 << 30;
        for (int l = 1; l <= n; l++) {
          if ((color[j] ^ color[l])) {
            dp[j][i] = min(dp[j][i], dp[l][i - 1] + e[l][j]);
          }
        }
      }
    }
    ans = min(ans, dp[1][k]);
  }
  printf("%d\n", ans);
  return 0;
}
