#include <bits/stdc++.h>
using namespace std;
#define int long long
const int MAXN = 1e5 + 15;
int N;
struct DATA {
int x, y, z, id;
};
struct cmp {
bool operator() (DATA a, DATA b) {
return a.x < b.x;
}
};
struct cmp1 {
bool operator() (DATA a, DATA b) {
return a.y < b.y;
}
};
struct cmp2 {
bool operator() (DATA a, DATA b) {
return a.z < b.z;
}
};
struct Edge {
int u, v, w;
};
struct cmpe {
bool operator() (Edge x, Edge y) {
return x.w < y.w;
}
};
struct Dosu {
int par[MAXN], sz[MAXN];
void INIT() {
for (int i = 1; i <= N; i++) {
par[i] = i;
sz[i] = 1;
}
}
int find_set(int u) {
return (par[u] == u ? u : par[u] = find_set(par[u]));
}
void union_set(int u, int v) {
u = find_set(u), v = find_set(v);
if (u == v) return;
if (sz[u] < sz[v]) swap(u, v);
par[v] = par[u];
sz[u] += sz[v];
}
} DSU;
DATA A[MAXN];
vector<Edge> v;
void upd() {
for (int i = 2; i <= N; i++) {
int a = abs(A[i].x - A[i - 1].x);
int b = abs(A[i].y - A[i - 1].y);
int c = abs(A[i].z - A[i - 1].z);
int tmp = min({a, b, c});
v.push_back({A[i].id, A[i - 1].id, tmp});
}
}
main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> N;
for (int i = 1; i <= N; ++i) {
cin >> A[i].x >> A[i].y >> A[i].z;
A[i].id = i;
}
sort (A + 1, A + N + 1, cmp());
upd();
sort (A + 1, A + N + 1, cmp1());
upd();
sort (A + 1, A + N + 1, cmp2());
upd();
sort(v.begin(), v.end(), cmpe());
int MST = 0;
DSU.INIT();
for (auto E : v) {
if (DSU.find_set(E.u) == DSU.find_set(E.v)) continue;
DSU.union_set(E.u, E.v);
MST += E.w;
}
cout << MST;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgaW50IGxvbmcgbG9uZwoKY29uc3QgaW50IE1BWE4gPSAxZTUgKyAxNTsKCmludCBOOwoKc3RydWN0IERBVEEgewogICAgaW50IHgsIHksIHosIGlkOwp9OwoKc3RydWN0IGNtcCB7CiAgICBib29sIG9wZXJhdG9yKCkgKERBVEEgYSwgREFUQSBiKSB7CiAgICAgICAgcmV0dXJuIGEueCA8IGIueDsKICAgIH0KfTsKCnN0cnVjdCBjbXAxIHsKICAgIGJvb2wgb3BlcmF0b3IoKSAoREFUQSBhLCBEQVRBIGIpIHsKICAgICAgICByZXR1cm4gYS55IDwgYi55OwogICAgfQp9OwoKc3RydWN0IGNtcDIgewogICAgYm9vbCBvcGVyYXRvcigpIChEQVRBIGEsIERBVEEgYikgewogICAgICAgIHJldHVybiBhLnogPCBiLno7CiAgICB9Cn07CgpzdHJ1Y3QgRWRnZSB7CiAgICBpbnQgdSwgdiwgdzsKfTsKCnN0cnVjdCBjbXBlIHsKICAgIGJvb2wgb3BlcmF0b3IoKSAoRWRnZSB4LCBFZGdlIHkpIHsKICAgICAgICByZXR1cm4geC53IDwgeS53OwogICAgfQp9OwoKc3RydWN0IERvc3UgewogICAgaW50IHBhcltNQVhOXSwgc3pbTUFYTl07CgogICAgdm9pZCBJTklUKCkgewogICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IE47IGkrKykgewogICAgICAgICAgICBwYXJbaV0gPSBpOwogICAgICAgICAgICBzeltpXSA9IDE7CiAgICAgICAgfQogICAgfQoKICAgIGludCBmaW5kX3NldChpbnQgdSkgewogICAgICAgIHJldHVybiAocGFyW3VdID09IHUgPyB1IDogcGFyW3VdID0gZmluZF9zZXQocGFyW3VdKSk7CiAgICB9CgogICAgdm9pZCB1bmlvbl9zZXQoaW50IHUsIGludCB2KSB7CiAgICAgICAgdSA9IGZpbmRfc2V0KHUpLCB2ID0gZmluZF9zZXQodik7CiAgICAgICAgaWYgKHUgPT0gdikgcmV0dXJuOwogICAgICAgIGlmIChzelt1XSA8IHN6W3ZdKSBzd2FwKHUsIHYpOwogICAgICAgIHBhclt2XSA9IHBhclt1XTsKICAgICAgICBzelt1XSArPSBzelt2XTsKICAgIH0KCn0gRFNVOwoKREFUQSBBW01BWE5dOwp2ZWN0b3I8RWRnZT4gdjsKCnZvaWQgdXBkKCkgewogICAgZm9yIChpbnQgaSA9IDI7IGkgPD0gTjsgaSsrKSB7CiAgICAgICAgaW50IGEgPSBhYnMoQVtpXS54IC0gQVtpIC0gMV0ueCk7CiAgICAgICAgaW50IGIgPSBhYnMoQVtpXS55IC0gQVtpIC0gMV0ueSk7CiAgICAgICAgaW50IGMgPSBhYnMoQVtpXS56IC0gQVtpIC0gMV0ueik7CiAgICAgICAgaW50IHRtcCA9IG1pbih7YSwgYiwgY30pOwogICAgICAgIHYucHVzaF9iYWNrKHtBW2ldLmlkLCBBW2kgLSAxXS5pZCwgdG1wfSk7CiAgICB9Cn0KCgoKbWFpbigpIHsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7CiAgICBjaW4udGllKDApOwogICAgY291dC50aWUoMCk7CgogICAgY2luID4+IE47CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBOOyArK2kpIHsKICAgICAgICBjaW4gPj4gQVtpXS54ID4+IEFbaV0ueSA+PiBBW2ldLno7CiAgICAgICAgQVtpXS5pZCA9IGk7CiAgICB9CgogICAgc29ydCAoQSArIDEsIEEgKyBOICsgMSwgY21wKCkpOwogICAgdXBkKCk7CiAgICBzb3J0IChBICsgMSwgQSArIE4gKyAxLCBjbXAxKCkpOwogICAgdXBkKCk7CiAgICBzb3J0IChBICsgMSwgQSArIE4gKyAxLCBjbXAyKCkpOwogICAgdXBkKCk7CiAgICBzb3J0KHYuYmVnaW4oKSwgdi5lbmQoKSwgY21wZSgpKTsKICAgIGludCBNU1QgPSAwOwogICAgRFNVLklOSVQoKTsKICAgIGZvciAoYXV0byBFIDogdikgewogICAgICAgIGlmIChEU1UuZmluZF9zZXQoRS51KSA9PSBEU1UuZmluZF9zZXQoRS52KSkgY29udGludWU7CiAgICAgICAgRFNVLnVuaW9uX3NldChFLnUsIEUudik7CiAgICAgICAgTVNUICs9IEUudzsKICAgIH0KCiAgICBjb3V0IDw8IE1TVDsKfQo=