import std.stdio;
import std.conv;
import std.string;
import std.typecons;
import std.algorithm;
import std.array;
import std.range;
import std.math;
import std.regex : regex;
import std.container;
import std.bigint;

struct Edge {
  int c;
  int i;
  int opCmp (const Edge e) const {
	  return (c < e.c) ? -1 : (c > e.c) ? 1 : (i < e.i) ? -1 : (i > e.i) ? 1 : 0;
	}
}

void main()
{
  int n;
  readf("%s\n", &n);

  auto p = new int[][](n, 2);
  foreach (i; 0..n) {
    p[i] = readln.chomp.split.to!(int[]);
  }

  auto que = BinaryHeap!(Edge[], "a > b")(new Edge[1_00000_00], 0);

  foreach (i; 1..n) {
    Edge a;
    a.c = min(
            max(p[0][0], p[i][0]) - min(p[0][0], p[i][0]), 
            max(p[0][1], p[i][1]) - min(p[0][1], p[i][1])
          );
    a.i = i;

    que.insert(a);
  }

  long cost;
  auto f = new bool[](n);
  f[0] = true;
  while (!que.empty) {
    auto e = que.front;
    que.removeFront;

    if (f[e.i]) continue;
    cost += e.c;
    f[e.i] = true;

    foreach (i; 1..n) {
      if (f[i]) continue;
      Edge a;
      a.c = min(
        max(p[e.i][0], p[i][0]) - min(p[e.i][0], p[i][0]), 
        max(p[e.i][1], p[i][1]) - min(p[e.i][1], p[i][1])
      );
      a.i = i;
      que.insert(a);
    }
  }

  cost.writeln;
}
