unittest
{
	assert( [ "3", "1 5", "3 9", "7 8" ].parse.expand.solve == 3 );
	assert( [ "6", "8 3", "4 9", "12 19", "18 1", "13 5", "7 6" ].parse.expand.solve == 8 );
}



import std.algorithm;
import std.conv;
import std.math;
import std.range;
import std.stdio;
import std.typecons;

void main()
{
	stdin.byLineCopy.parse.expand.solve.writeln;
}

auto parse( Range )( Range input )
if( isInputRange!Range && is( ElementType!Range == string ) )
{
	auto n = input.front.to!( long );
	auto xyis = new long[ 3 ][ n ];
	foreach( i, ref xyi; xyis )
	{
		input.popFront;
		xyi = input.front.split.to!( long[] ) ~ i;
	}
	return tuple( xyis );
}

auto solve( long[ 3 ][] xyis )
{
	// xでソートして隣同士の頂点を結ぶ辺配列を作成
	// （コストはΔxとΔyのminを取るので、xとyは別々の辺と考えてよい。大きいほうのΔの辺は作るけど使われない）
	auto es = new long[ 3 ][ ( xyis.length - 1 ) * 2 ];
	xyis.sort();
	for( auto i = 0L; i + 1 < xyis.length; i++ )
	{
		es[ i ] = [ xyis[ i ][ 2 ], xyis[ i + 1 ][ 2 ], ( xyis[ i ][ 0 ] - xyis[ i + 1 ][ 0 ] ).abs ];
	}
	
	// yでソートして隣同士の頂点を結ぶ辺配列を作成
	xyis.sort!( ( a, b ) => a[ 1 ] < b[ 1 ] );
	for( auto i = 0L; i + 1 < xyis.length; i++ )
	{
		es[ xyis.length - 1 + i ] = [ xyis[ i ][ 2 ], xyis[ i + 1 ][ 2 ], ( xyis[ i ][ 1 ] - xyis[ i + 1 ][ 1 ] ).abs ];
	}
	
	// 全頂点が木構造になるように、辺をコストが小さい順で使う
	es.sort!( ( a, b ) => a[ 2 ] < b[ 2 ] );
	auto ans = 0L;
	auto uft = UnionFindTree( xyis.length );
	foreach( e; es )
	{
		if( uft.same( e[ 0 ], e[ 1 ] ) ) continue;		// もう行き来できるので辺の追加は不要
		uft.unite( e[ 0 ], e[ 1 ] );
		ans += e[ 2 ];
	}
	return ans;
}

// UnionFind木
struct UnionFindTree
{
	private long[] ps;
	
	// 重み無し初期化
	public this( long n )
	{
		ps.length = n;
		ps[] = -1;		// マイナスは根であり、その木に属するノードの数でもある。
	}
	
	public long root( long i )
	{
		if( ps[ i ] < 0 ) return i;
		else              return ps[ i ] = root( ps[ i ] );
	}
	
	public bool same( long i, long j )
	{
		return root( i ) == root( j );
	}
	
	public void unite( long i, long j )
	{
		i = root( i );
		j = root( j );
		if( i == j ) return;
		if( ps[ i ] <= ps[ j ] ){ ps[ i ] += ps[ j ]; ps[ j ] = i; }
		else                    { ps[ j ] += ps[ i ]; ps[ i ] = j; }
	}
}
