fun main(args: Array<String>) {
if(args.isNotEmpty()) {
System.setIn(java.io.FileInputStream(args[0]))
}
val numTests = readLine()!!.toInt()
require(numTests in 1..5)
var sumN = 0
repeat(numTests) {
val (N, K) = readLine()!!.split(" ").map{ it.toInt() }
require(N in 1..20)
require(K in 3..N)
sumN += N
require(sumN <= 20)
val W = List(N) { readLine()!!.split(" ").map{ it.toInt() } }
require((0 until N).all{ W[it][it] == 0 })
require((1 until N).all{ i -> (0 until i).all{ j -> W[i][j] == W[j][i] } })
require((1 until N).all{ i -> (0 until i).all{ j -> W[i][j] in 1..1000000 } })
val edgesum = IntArray(1 shl N)
for(mask in 1 until (1 shl N)) {
val i = Integer.bitCount(Integer.lowestOneBit(mask) - 1)
var sum = 0
for(j in 0 until N) if((mask shr j) and 1 == 1) sum += W[i][j]
edgesum[mask] = edgesum[mask xor (1 shl i)] + sum
}
// 3^(N-K) * (K-2) <= 3^17
val dp = IntArray(1 shl (N-K)) { mask -> edgesum[(mask shl K) or 1] }
for(u in 1 until K) {
for(mask in (1 shl (N-K)) - 1 downTo 0) {
var submask = mask
var now = dp[mask]
while(submask > 0) {
now = maxOf(dp[mask xor submask] + edgesum[(submask shl K) or (1 shl u)], now)
submask = (submask - 1) and mask
}
dp[mask] = now
if(u == K-1) break
}
}
println(W.map{ it.sum() }.sum() / 2 - dp.max()!!)
}
}