#include <bits/stdc++.h>
using namespace std;
typedef struct TOWN {
  int x, y, i;
} Town;
typedef struct COST {
  int p[2];
  int c;
} Cost;
int N;
long x[100009], y[100009];
vector<Cost> cost;
vector<Town> town;
int iv[100009];
long total = 0;
bool comp(const Cost &l, const Cost &r) { return l.c < r.c; }
bool compX(const Town &l, const Town &r) {
  return l.x == r.x ? l.i < r.i : l.x < r.x;
}
bool compY(const Town &l, const Town &r) {
  return l.y == r.y ? l.i < r.i : l.y < r.y;
}
int main() {
  cin >> N;
  int N2 = (N - 1) * 2;
  cost.resize(N2);
  town.resize(N);
  for (int i = 0; i < N; i++) {
    cin >> town[i].x >> town[i].y;
    town[i].i = i;
    iv[i] = 0;
  }
  sort(town.begin(), town.end(), compX);
  for (int i = 0; i < N - 1; i++) {
    cost[i].p[0] = town[i].i;
    cost[i].p[1] = town[i + 1].i;
    cost[i].c = town[i + 1].x - town[i].x;
  }
  sort(town.begin(), town.end(), compY);
  for (int i = i; i < N - 1; i++) {
    cost[i + N - 1].p[0] = town[i].i;
    cost[i + N - 1].p[1] = town[i + 1].i;
    cost[i + N - 1].c = town[i + 1].y - town[i].y;
  }
  sort(cost.begin(), cost.end(), comp);
  int k = 1;
  int p0, p1, vn, vn2;
  for (int i = 0; i < N2; i++) {
    p0 = cost[i].p[0];
    p1 = cost[i].p[1];
    vn = iv[p0] > iv[p1] ? iv[p0] : iv[p1];
    vn2 = iv[p0] <= iv[p1] ? iv[p0] : iv[p1];
    if (iv[p0] == iv[p1] && iv[p0] > 0) {
      continue;
    }
    if (iv[p0] == 0 && iv[p1] == 0) {
      iv[p0] = k;
      iv[p1] = k;
    } else if (iv[p0] == 0 || iv[p1] == 0) {
      iv[p0] = vn;
      iv[p1] = vn;
    } else {
      for (int j = 0; j < N; j++) {
        if (iv[j] == vn2) {
          iv[j] = vn;
        }
      }
      iv[p0] = vn;
      iv[p1] = vn;
    }
    k++;
    total += cost[i].c;
    if (k >= N) {
      break;
    }
  }
  cout << total << endl;
  return 0;
}
