#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <math.h>
#include <cstring>
#include <string>
#include <queue>
#include <deque>
#include <stack>
#include <cstdlib>
#include <list>
#include <map>
#include <utility>
#include <set>
#include <bitset>
#include <vector>
#define pi acos(-1.0)
#define inf 0x3f3f3f3f
#define ll long long
#define linf 0x3f3f3f3f3f3f3f3fLL
using namespace std;
int cur=0;
struct node
{
    ll x,y;
    int w;
} pp[100005];
struct edge
{
    ll u,v,w;
} e[100005];
int vis[100005];
bool cmp1(node a,node b)
{
    return a.x<b.x;
}
void add(int u,int v,int w)
{
    e[cur].u = u;
    e[cur].v = v;
    e[cur++].w =w;
}
bool cmp2(node a,node b)
{
    return a.y<b.y;
}
bool cmp(edge a,edge b)
{
    return a.w<b.w;
}
int find(int x)
{
	if(vis[x]==x)
	return vis[x];
	return vis[x] = find(vis[x]);
}
int main()
{
    int n;
    scanf("%d",&n);
    {
        for(int i=1; i<=n; i++)
        {
            vis[i]=i;
            scanf("%lld%lld",&pp[i].x,&pp[i].y);
            pp[i].w=i;
        }
        sort(pp+1,pp+n+1,cmp1);
        for(int i=2; i<=n; i++)
        {
            add(pp[i-1].w,pp[i].w,pp[i].x-pp[i-1].x);
        }
        sort(pp+1,pp+n+1,cmp2);
        for(int i=2; i<=n; i++)
        {
            add(pp[i-1].w,pp[i].w,pp[i].y-pp[i-1].y);
        }
        sort(e,e+cur,cmp);
        ll sum=0;
        for(int i=0;i<cur;i++)
        {
            int fx=find(e[i].u);
            int fy=find(e[i].v);
            if(fx != fy)
            {
                vis[fx]=fy;
                sum += e[i].w;
            }
        }
        printf("%lld\n",sum);
    }
    return 0;
}
