
def foo(tup):
    return tup[0]

def go(v):
    v.sort(key=foo)
    eq = [[[v[0], False]]]

    for vol in v:
        if vol == v[0]:
            continue
        if vol[0] == eq[-1][0][0][0]:
            eq[-1].append([vol, False])
        else:
            eq.append([[vol, False]])

    print(shortest_rec(eq, 0, None, 0))

def shortest_rec(volc, dist, prev, eq_i):
    if eq_i == len(volc):
        return dist
    
    last = True
    distances = []
    for vol in volc[eq_i]:
        
        if vol[1]:
            continue
        last = False
        if prev is not None:
            dist += abs(prev[0][0] - vol[0][0]) + abs(prev[0][1] - vol[0][1])
        vol[1] = True
        distances.append(shortest_rec(volc, dist, vol, eq_i))
        if prev is not None:
            dist -= abs(prev[0][0] - vol[0][0]) + abs(prev[0][1] - vol[0][1])
        vol[1] = False


    if last:
        return shortest_rec(volc, dist, prev, eq_i + 1)
    else:
        return min(distances)





def main():
    n = int(input())
    if n == 0:
        return 0
    positions = []
    for i in range(n):
        pos = input().split(" ")
        positions.append((int(pos[0]), int(pos[1])))
    
    go(positions)

main()