#include <bits/stdc++.h>
#define X first
#define Y second
#define ll long long
#define pii pair<ll, ll>
#define all(x) (x).begin(), (x).end()
#define tp tuple<ll,int,int>
#define oo (ll) 1e18
#define LOG_MAX 20
using namespace std;
#define MAXN 100010
#define MOD 1000000007
int n;
int par[MAXN];
vector<pii>points[5];
vector<tp>op;
int Find(int u){
if(u==par[u]) return u;
return par[u]=Find(par[u]);
}
bool join(int u,int v){
u = Find(u) , v = Find(v);
if(u!=v){
par[v] = u;
return true;
}
return false;
}
void add(int j,int i){
int x=abs(points[j][i].X-points[j][i-1].X);
op.push_back({x,points[j][i].Y,points[j][i-1].Y});
}
signed main(){
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
//freopen("SHIP.inp","r",stdin);
//freopen("SHIP.out","w",stdout);
cin>>n;
for(int i=1;i<=n;i++){
int x,y,z; cin>>x>>y>>z;
points[1].push_back({x,i});
points[2].push_back({y,i});
points[3].push_back({z,i});
par[i]=i;
}
ll ans=0;
sort(all(points[1]));
sort(all(points[2]));
sort(all(points[3]));
for(int i=1;i<n;i++){
for(int j=1;j<=3;j++)
add(j,i);
}
sort(all(op));
for(auto [w,u,v] : op){
if(join(u,v)) ans+=w;
}
cout<<ans;
return 0;
}
/*
*/
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgWCBmaXJzdAojZGVmaW5lIFkgc2Vjb25kCiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgcGlpIHBhaXI8bGwsIGxsPgojZGVmaW5lIGFsbCh4KSAoeCkuYmVnaW4oKSwgKHgpLmVuZCgpCiNkZWZpbmUgdHAgdHVwbGU8bGwsaW50LGludD4KI2RlZmluZSBvbyAobGwpIDFlMTgKI2RlZmluZSBMT0dfTUFYIDIwCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgTUFYTiAxMDAwMTAKI2RlZmluZSBNT0QgMTAwMDAwMDAwNwoKaW50IG47CmludCBwYXJbTUFYTl07CnZlY3RvcjxwaWk+cG9pbnRzWzVdOwp2ZWN0b3I8dHA+b3A7CmludCBGaW5kKGludCB1KXsKICAgIGlmKHU9PXBhclt1XSkgcmV0dXJuIHU7CiAgICByZXR1cm4gcGFyW3VdPUZpbmQocGFyW3VdKTsKfQpib29sIGpvaW4oaW50IHUsaW50IHYpewogICAgdSA9IEZpbmQodSkgLCB2ID0gRmluZCh2KTsKICAgIGlmKHUhPXYpewogICAgICAgIHBhclt2XSA9IHU7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7Cn0Kdm9pZCBhZGQoaW50IGosaW50IGkpewogICAgaW50IHg9YWJzKHBvaW50c1tqXVtpXS5YLXBvaW50c1tqXVtpLTFdLlgpOwogICAgb3AucHVzaF9iYWNrKHt4LHBvaW50c1tqXVtpXS5ZLHBvaW50c1tqXVtpLTFdLll9KTsKfQpzaWduZWQgbWFpbigpewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsgY2luLnRpZSgwKTsgY291dC50aWUoMCk7CiAgICAvL2ZyZW9wZW4oIlNISVAuaW5wIiwiciIsc3RkaW4pOwogICAgLy9mcmVvcGVuKCJTSElQLm91dCIsInciLHN0ZG91dCk7CiAgICBjaW4+Pm47CiAgICBmb3IoaW50IGk9MTtpPD1uO2krKyl7CiAgICAgICAgaW50IHgseSx6OyBjaW4+Png+Pnk+Pno7CiAgICAgICAgcG9pbnRzWzFdLnB1c2hfYmFjayh7eCxpfSk7CiAgICAgICAgcG9pbnRzWzJdLnB1c2hfYmFjayh7eSxpfSk7CiAgICAgICAgcG9pbnRzWzNdLnB1c2hfYmFjayh7eixpfSk7CiAgICAgICAgcGFyW2ldPWk7CiAgICB9CiAgICBsbCBhbnM9MDsKICAgIHNvcnQoYWxsKHBvaW50c1sxXSkpOwogICAgc29ydChhbGwocG9pbnRzWzJdKSk7CiAgICBzb3J0KGFsbChwb2ludHNbM10pKTsKICAgIGZvcihpbnQgaT0xO2k8bjtpKyspewogICAgICAgIGZvcihpbnQgaj0xO2o8PTM7aisrKQogICAgICAgICAgICBhZGQoaixpKTsKICAgIH0KICAgIHNvcnQoYWxsKG9wKSk7CiAgICBmb3IoYXV0byBbdyx1LHZdIDogb3ApewogICAgICAgIGlmKGpvaW4odSx2KSkgYW5zKz13OwogICAgfQogICAgY291dDw8YW5zOwogICAgcmV0dXJuIDA7Cn0KLyoKKi8K