#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <cmath>
#include <limits>
#include <queue>
#include <iomanip>
#include <set>
//#include <bits/stdc++.h>
template<typename T> bool chmax(T &a,T b){if(a<b){a=b;return true;}return false;}
template<typename T> bool chmin(T &a,T b){if(a>b){a=b;return true;}return false;}
using namespace std;
#define ALL(X) X.begin(),X.end()
using ll = long long int;
typedef vector<ll> vll;
typedef vector<vll> vvll;
typedef vector<vvll> vvvll;
const int MOD=1000000007;
//const int MOD=998244353;
const int INTMAX=2147483647;
const ll LLMAX=9223372036854775807;

bool comp(vll a,vll b){
    return a[0]<b[0];
}





int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    
    ll N;
    cin>>N;
    vvll x(N,vll(2)),y(N,vll(2));
    for(ll i=0;i<N;i++){
        cin>>x[i][0]>>y[i][0];
        x[i][1]=i;y[i][1]=i;
    }
    
    sort(ALL(x),comp);sort(ALL(y),comp);
    
    vvll cost(N,vll(N,LLMAX));
    for(ll i=0;i<N-1;i++){
        cost[x[i][1]][x[i+1][1]]=x[i+1][0]-x[i][0];
        cost[x[i+1][1]][x[i][1]]=x[i+1][0]-x[i][0];
    }
    for(ll i=0;i<N-1;i++){
        cost[y[i][1]][y[i+1][1]]=y[i+1][0]-y[i][0];
        cost[y[i+1][1]][y[i][1]]=y[i+1][0]-y[i][0];
    }
    
    vll s(2*N-2),t(2*N-2),c(2*N-2);
    for(ll i=0;i<N-1;i++){
        s[i]=x[i][1];
        t[i]=x[i+1][1];
        c[i]=x[i+1][0]-x[i][0];
    }
    for(ll i=0;i<N-1;i++){
        s[i+N-1]=y[i][1];
        t[i+N-1]=y[i+1][1];
        c[i+N-1]=y[i+1][0]-y[i][0];
    }
    
    cout<<kruskal(s,t,c,N)<<endl;
    
    return 0;
}
