void solve(){
int N; cin >> N;
vector<array<ll, 4>> planets;
rep(i, 0, N){
int x, y, z; cin >> x >> y >> z;
planets.push_back({x, y, z, i});
}
vector<array<ll, 3>> edges;
sort(all(planets), [](auto &a, auto &b){
return a[0] < b[0];
});
rep(i, 0, N-1) edges.push_back({abs(planets[i][0]-planets[i+1][0]), planets[i][3], planets[i+1][3]});
sort(all(planets), [](auto &a, auto &b){
return a[1] < b[1];
});
rep(i, 0, N-1) edges.push_back({abs(planets[i][1]-planets[i+1][1]), planets[i][3], planets[i+1][3]});
sort(all(planets), [](auto &a, auto &b){
return a[2] < b[2];
});
rep(i, 0, N-1) edges.push_back({abs(planets[i][2]-planets[i+1][2]), planets[i][3], planets[i+1][3]});
sort(all(edges));
UF.init(N);
ll ans = 0;
for(auto [w, u, v]: edges) if(UF.merge(u, v)) ans += w;
cout << ans << '\n';
}