// warm heart, wagging tail,and a smile just for you!
//                                                                     ███████████   
//                                                                   ███╬╬╬╬╬╬╬╬╬╬███
//                                                                ███╬╬╬╬╬████╬╬╬╬╬╬███
//                                            ███████████       ██╬╬╬╬╬████╬╬████╬╬╬╬╬██
//                                      █████████╬╬╬╬╬████████████╬╬╬╬╬██╬╬╬╬╬╬███╬╬╬╬╬██
//                               ████████╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬█████████╬╬╬╬╬╬██╬╬╬╬╬╬╬██
//                             ████╬██╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬█████████╬╬╬╬╬╬╬╬╬╬╬██
//                           ███╬╬╬█╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬██╬╬███╬╬╬╬╬╬╬█████
//                         ███╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬██╬╬╬████████╬╬╬╬╬██
//                       ███╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬███╬╬╬╬╬╬╬╬╬███
//                     ███╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬█████╬╬╬╬╬╬╬██
//                 ████╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬████╬╬╬╬╬████
//     █████████████╬╬╬╬╬╬╬╬██╬╬╬╬╬████╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬█████╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬███╬╬╬╬██████
//   ████╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬██╬╬██████╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬██████╬╬╬╬╬╬╬███████████╬╬╬╬╬╬╬╬██╬╬╬██╬╬╬██
// ███╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬██╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬██╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬████╬╬╬╬╬╬╬╬╬╬╬█╬╬╬╬╬╬╬██╬╬╬╬╬╬╬╬██
// ██╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬██╬╬╬╬▓▓▓▓▓▓╬╬╬████╬╬████╬╬╬╬╬╬╬▓▓▓▓▓▓▓▓██╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬██╬╬╬╬╬╬╬███
// ██╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬██████▓▓▓▓▓▓▓╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬▓▓▓▓▓▓▓██╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬██╬╬╬╬█████
// ███╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬███╬╬╬╬╬██╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬█████╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬████████
//   ███╬╬╬╬╬╬╬╬╬╬╬╬╬█████╬╬╬╬╬╬╬╬██╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬███╬╬██╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬██
//       ██████████████  ████╬╬╬╬╬╬███████████████████████████╬╬╬╬╬██╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬████
//                         ███████                           █████  ███████████████████  
#include "bits/stdc++.h"
using namespace std;
#define MOD 1000000007
#define INF 1LL<<60
#define fs first
#define sc second
#define pb push_back
#define int long long
#define FOR(i,a,b) for(int i=(a);i<(b);i++)
#define RFOR(i,a,b) for(int i = (b-1);i>=a;i--)
#define REP(i,n)  FOR(i,0,n)
#define RREP(i,n) RFOR(i,0,n)
#define ITR(itr,mp) for(auto itr = (mp).begin(); itr != (mp).end(); ++itr)
#define RITR(itr,mp) for(auto itr = (mp).rbegin(); itr != (mp).rend(); ++itr)
#define range(i,a,b) ((a)<=(i) && (i)<(b))
#define debug(x)  cout << #x << " = " << (x) << endl;
#define SP << " " << 
typedef pair<int,int> P;
typedef vector<vector<P> > Graph;

class Array {
public:
    Array() {}
 
    Array(int n) {
        h = 0;
        for (int i = 1; i < n; i *= 8) h += 3;
    }
 
    int *mutable_get(int k) {
        auto p = mutable_get(k, root, 0, h);
        root = p.first;
        return &p.second->value;
    }
 
    int operator[](int k) {
        node *res = immutable_get(k, root, 0, h);
        return res != nullptr ? res->value : -1;
    }
 
private:
    struct node {
        node *ch[8] = {};
        int value = -1;
    };
 
    int h;
    node *root = nullptr;
 
    node *immutable_get(int a, node *x, int l, int d) {
        if (x == nullptr) return x;
        if (d == 0) return x;
        int id = (a - l) >> (d - 3);
        return immutable_get(a, x->ch[id], l + (id << (d - 3)), d - 3);
    }
 
    pair<node *, node *> mutable_get(int a, node *x, int l, int d) {
        x = x != nullptr ? new node(*x) : new node();
        if (d == 0) return make_pair(x, x);
        int id = (a - l) >> (d - 3);
        auto p = mutable_get(a, x->ch[id], l + (id << (d - 3)), d - 3);
        x->ch[id] = p.first;
        return make_pair(x, p.second);
    }
};
 
// root: O(logN loglogN)
// merge: O(logN loglogN)
struct UnionFind {
    Array uf;
 
    UnionFind() : uf(0) {}
 
    UnionFind(int n) : uf(n) {}
 
    int root(int x) {
        int nd = uf[x];
        if (nd < 0) return x;
        return root(nd);
    }
 
    void unit(int x, int y) {
        x = root(x);
        y = root(y);
        if (x == y) return;
 
        int *u = uf.mutable_get(x);
        int *v = uf.mutable_get(y);
        if (-*u < -*v) swap(u, v), swap(x, y);
 
        *u += *v;
        *v = x;
    }

    bool isUnit(int x, int y) {
        x = root(x);
        y = root(y);
        return x == y;
    }
 
    int size(int x) {
        return -uf[root(x)];
    }
 
    int query(int x, int y) {
        x = root(x);
        y = root(y);
        if (x == y) {
            return -uf[x];
        }
        else {
            return -uf[x] - uf[y];
        }
    }
};

signed main(){
  ios::sync_with_stdio(false);
  cin.tie(0);  
  //問題文を読む時間をケチらない！！

  int n;
  cin >> n;
 
  vector<int> a(n),b(n);
  REP(i,n) cin >> a[i] >> b[i];

  vector<pair<int,P>> edge(2*n-2);  
  vector<P> tmp(n);
  REP(i,n) tmp[i] = P(a[i],i);
  sort(tmp.begin(),tmp.end());

  REP(i,n-1) edge[i] = make_pair(tmp[i+1].fs-tmp[i].fs,P(tmp[i].sc,tmp[i+1].sc));
 
  REP(i,n) tmp[i] = P(b[i],i);
  sort(tmp.begin(),tmp.end());
 
  REP(i,n-1) edge[i+n-1] = make_pair(tmp[i+1].fs-tmp[i].fs,P(tmp[i].sc,tmp[i+1].sc));
 
  sort(edge.begin(),edge.end());

  UnionFind uf[edge.size()];
  uf[0] = UnionFind(n);
  int ans = 0;
  REP(i,edge.size()){
    if(i != 0) uf[i] = uf[i-1];
    int x = edge[i].sc.fs, y = edge[i].sc.sc, co = edge[i].fs;
    if(uf[i].isUnit(x,y)) continue;
    ans += co;
    uf[i].unit(x,y);
  }
 
  cout << ans << endl;

  return 0;
}

Measured memory_bytes: 120576