#!/usr/bin/env python3
import sys
import math
import random
import os
from io import BytesIO, IOBase
FAST_IO_BUFSIZE = 8192
class FastIO(IOBase):
newlines = 0
def __init__(self, file):
self._file = file
self._fd = file.fileno()
self.buffer = BytesIO()
self.writable = "x" in file.mode or "r" not in file.mode
self.write = self.buffer.write if self.writable else None
def read(self):
while True:
b = os.read(self._fd, max(os.fstat(self._fd).st_size, FAST_IO_BUFSIZE))
if not b:
break
ptr = self.buffer.tell()
self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr)
self.newlines = 0
return self.buffer.read()
def readline(self):
while self.newlines == 0:
b = os.read(self._fd, max(os.fstat(self._fd).st_size, FAST_IO_BUFSIZE))
self.newlines = b.count(b"\n") + (not b)
ptr = self.buffer.tell()
self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr)
self.newlines -= 1
return self.buffer.readline()
def flush(self):
if self.writable:
os.write(self._fd, self.buffer.getvalue())
self.buffer.truncate(0), self.buffer.seek(0)
class IOWrapper(IOBase):
def __init__(self, file):
self.buffer = FastIO(file)
self.flush = self.buffer.flush
self.writable = self.buffer.writable
self.write = lambda s: self.buffer.write(s.encode("ascii"))
self.read = lambda: self.buffer.read().decode("ascii")
self.readline = lambda: self.buffer.readline().decode("ascii")
sys.stdin, sys.stdout = IOWrapper(sys.stdin), IOWrapper(sys.stdout)
input = lambda: sys.stdin.readline().rstrip("\r\n")
class Dsu:
par = []
sz = []
num_sets = 0
size = 0
def __init__(self, n):
self.par = [i for i in range(n)]
self.sz = [1 for i in range(n)]
self.num_sets = n
self.size = n
def reset(self, n):
if n > self.size:
self.par += [i for i in range(self.size, n)]
self.sz += [1 for i in range(self.size, n)]
self.size = n
for i in range(n):
self.par[i] = i
self.sz[i] = 1
self.num_sets = n
def find(self, a):
if self.par[a] == a:
return a
self.par[a] = self.find(self.par[a])
return self.par[a]
def union(self, a, b):
a = self.find(a)
b = self.find(b)
if a == b:
return
if self.sz[a] < self.sz[b]:
a, b = b, a
self.par[b] = a
self.sz[a] += self.sz[b]
self.num_sets -= 1
# sys.setrecursionlimit(10**5)
class solution:
lim = 2 * 10**5 + 5
def __init__(self) -> None:
pass
def solve(self) -> None:
self.solve_case()
def solve_case(self) -> None:
n, k = map(int, input().split())
points = [list(map(int, input().split())) for _ in range(n)]
edges = [(i, j, self.distance(points[i], points[j], k)) for i in range(n) for j in range(i+1, n)]
edges.sort(key=lambda x: -x[2])
dsu = Dsu(n)
ans = 0
for i, j, w in edges:
if dsu.find(i) != dsu.find(j):
dsu.union(i, j)
ans += w
print(ans)
def distance(self, a, b, k):
return sum([abs(a[i] - b[i]) for i in range(k)])
if __name__ == "__main__":
solution().solve()