class UnionFind():
    def __init__(self,size):
        self.data=[-1 for i in range(size)]
    def root(self,x):
        if self.data[x]<0:
            return x
        else:
            self.data[x]=self.root(self.data[x])
            return self.data[x]
    def united(self,x,y):
        return self.root(x)==self.root(y)
    def unite(self,x,y):
        x=self.root(x)
        y=self.root(y)
        if x!=y:
            x,y=sorted((x,y))
            self.data[x]+=self.data[y]
            self.data[y]=x
    def dump(self):
        print(self.data)

n=int(input())
uf=UnionFind(n)
lx=[]
ly=[]
for i in range(n):
    s=input().split()
    x=int(s[0])
    y=int(s[1])
    lx.append((x,i))
    ly.append((y,i))
lx.sort()
ly.sort()
l=[]
for i in range(n-1):
    l.append((lx[i+1][0]-lx[i][0],lx[i+1][1],lx[i][1]))
    l.append((ly[i+1][0]-ly[i][0],ly[i+1][1],ly[i][1]))
l.sort()
res=0
for p in l:
    if not uf.united(p[1],p[2]):
        res+=p[0]
        uf.unite(p[1],p[2])
print(res)
