using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Codeforces
{
	internal class Template
	{
		private void Solve()
		{
			var n = cin.NextInt();
			var towns = new Town[n];
			for (var i = 0; i < n; i++)
			{
				towns[i] = new Town(cin.NextInt(), cin.NextInt());
			}
			var xx = towns.OrderBy(a => a.X).ThenBy(a => a.Y).ToList();
			for (var i = 0; i < xx.Count; i++)
			{
				xx[i].IdxX = i;
			}
			var yy = towns.OrderBy(a => a.Y).ThenBy(a => a.X).ToList();
			for (var i = 0; i < yy.Count; i++)
			{
				yy[i].IdxY = i;
			}
			var y = new Queue<Town>(yy);
			var cost = 0L;
			while (y.Any())
			{
				if (y.Peek().Taken)
				{
					y.Dequeue();
					continue;
				}
				var cur = y.Dequeue();
				cur.Taken = true;
				var idxX1 = cur.IdxX - 1;
				var idxX2 = cur.IdxX + 1;
				if (idxX1 < 0)
				{
					idxX1 = idxX2;
				}
				else if (idxX2 >= xx.Count)
				{
					idxX2 = idxX1;
				}
				var idxY1 = cur.IdxY - 1;
				var idxY2 = cur.IdxY + 1;
				if (idxY1 < 0)
				{
					idxY1 = idxY2;
				}
				else if (idxY2 >= yy.Count)
				{
					idxY2 = idxY1;
				}

				var diffX1 = Math.Abs(cur.X - xx[idxX1].X);
				var diffX2 = Math.Abs(cur.X - xx[idxX2].X);
				var diffY1 = Math.Abs(cur.Y - yy[idxY1].Y);
				var diffY2 = Math.Abs(cur.Y - yy[idxY2].Y);
				var test = new[]
				{
					Tuple.Create(diffX1, idxX1, 0), Tuple.Create(diffX2, idxX2, 0), Tuple.Create(diffY1, idxY1, 1),
					Tuple.Create(diffY2, idxY2, 1)
				}.OrderBy(x => x.Item1).ToList();
				cost += test[0].Item1;
				if (test[0].Item3 == 0)
				{
					xx[test[0].Item2].Taken = true;
				}
				else
				{
					yy[test[0].Item2].Taken = true;
				}
			}
			Console.WriteLine(cost);
		}

		public class Town
		{
			public int X, Y;
			public bool Taken;
			public int IdxX, IdxY;

			public Town(int x, int y)
			{
				X = x;
				Y = y;
			}
		}

		private static readonly Scanner cin = new Scanner();

		private static void Main()
		{
			new Template().Solve();
			Console.ReadLine();
		}
	}

	internal class Scanner
	{
		private string[] s = new string[0];
		private int i;
		private readonly char[] cs = { ' ' };

		public string NextString()
		{
			if (i < s.Length) return s[i++];
			var line = Console.ReadLine() ?? string.Empty;
			s = line.Split(cs, StringSplitOptions.RemoveEmptyEntries);
			i = 1;
			return s.First();
		}

		public double NextDouble()
		{
			return double.Parse(NextString());
		}

		public int NextInt()
		{
			return int.Parse(NextString());
		}

		public long NextLong()
		{
			return long.Parse(NextString());
		}
	}
}