#include<bits/stdc++.h>
using namespace std;
struct node{
int x;
int y;
int z;
int id;
}a[1000001];
struct ppp{
int u;
int v;
int w;
}pp[1000001];
bool cmp1(node a,node b){
return a.x<=b.x;
}
bool cmp2(node a,node b){
return a.y<=b.y;
}
bool cmp3(node a,node b){
return a.z<=b.z;
}
bool cmp(ppp a,ppp b){
return a.w<=b.w;
}
int n,ans,f[1000001];
int find(int x){
if(x==f[x])
return x;
return f[x]=find(f[x]);
}
int main() {
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i].x>>a[i].y>>a[i].z;
a[i].id=i;
f[i]=i;
}
sort(a+1,a+n+1,cmp1);
for(int i=2;i<=n;i++){
pp[i].u=a[i-1].id;
pp[i].v=a[i].id;
pp[i].w=abs(a[i].x-a[i-1].x);
}
pp[1].w=1e9;
sort(a+1,a+n+1,cmp2);
for(int i=2+n;i<=n+n;i++){
pp[i].u=a[i-n-1].id;
pp[i].v=a[i-n].id;
pp[i].w=abs(a[i-n].y-a[i-n-1].y);
}
pp[n+1].w=1e9;
sort(a+1,a+n+1,cmp3);
for(int i=2+2*n;i<=3*n;i++){
pp[i].u=a[i-2*n-1].id;
pp[i].v=a[i-2*n].id;
pp[i].w=abs(a[i-2*n].z-a[i-1-2*n].z);
}
pp[2*n+1].w=1e9;
sort(1+pp,pp+3*n+1,cmp);
for(int i=1;i<=3*n-3;i++){
if(f[find(pp[i].u)]!=f[find(pp[i].v)]){
ans+=pp[i].w;
int x=find(pp[i].u),y=find(pp[i].v);
f[x]=y;
}
}
cout<<ans;
return 0;
}