#include<bits/stdc++.h>
using namespace std ;
struct node {
int x,y,z,id ;};
node b[100010] ;
struct h {
int s ;
int e ;
int u ;};
h c[300010] ;
int top=0 ;
int d[100010] ;
bool cmp(h a,h b) {
return a.u<b.u ;}
int find(int x) {
if(d[x]==x) return x ;
d[x]=find(d[x]) ;
return d[x] ;}
void merge(int x,int y) {
int fx=find(x),fy=find(y) ;
if(fx!=fy) d[fx]=fy ;}
int main() {
int n ;
cin>>n ;
for(int i=1;i<=n;i++) {
cin>>b[i].x>>b[i].y>>b[i].z ;
b[i].id=i ;}
sort(b+1,b+1+n,[](node a,node b) {
return a.x<b.x ;});
for(int i=1;i<=n-1;i++) {
c[++top].u=b[i+1].x-b[i].x ;
c[top].s=b[i].id ;
c[top].e=b[i+1].id ;}
sort(b+1,b+1+n,[](node a,node b) {
return a.y<b.y ;});
for(int i=1;i<=n-1;i++) {
c[++top].u=b[i+1].y-b[i].y ;
c[top].s=b[i].id ;
c[top].e=b[i+1].id ;}
sort(b+1,b+1+n,[](node a,node b) {
return a.z<b.z ;});
for(int i=1;i<=n-1;i++) {
c[++top].u=b[i+1].z-b[i].z ;
c[top].s=b[i].id ;
c[top].e=b[i+1].id ;}
sort(c+1,c+1+top,cmp) ;
int ans=0,anss=0 ;
for(int i=1;i<=n;i++) d[i]=i ;
for(int i=1;i<=top;i++) {
if(find(c[i].s)!=find(c[i].e)) {
merge(c[i].s,c[i].e) ;
ans++ ;
anss+=c[i].u ;
if(ans>n-1) break ;}}
cout<<anss ;
return 0 ;}