# 1. Load input n=int(input()) points = [] for _ in range(n): x, y = map(int, input().split()) points.append((x,y)) ####################################################### # points = sorted(points) points = sorted(points, key=lambda p: (p[0], -p[1])) # calc fixed x dist total x_dist = abs(points[0][0] - points[-1][0]) # calc indices when x-cord changes points_change = [] last_i = 0 for i in range(1, len(points)): # print(f"{points[i-1], points[i]=}") if points[i-1][0] != points[i][0]: points_change.append([last_i, i-1]) last_i=i # print(f"\t{points_change[-1]=}") points_change.append([last_i, len(points)-1]) # print(points) # print(points_change) # sum y dist of points with same x coord y_dist_same = 0 for i in range(len(points_change)): x1, x2 = points_change[i] if (x2!=x1): y_dist_same += abs(points[x1][1]-points[x2][1]) # # # sum y dist of points with diff x coord # # # snake like sign=1 y_dist_diff1 = 0 for i in range(len(points_change)-1): sign = (sign+1)%2 a, b = points_change[i][sign], points_change[i+1][(sign)] # print(f"{a} -> {b} {points[a], points[b]=} {abs(points[a][1] - points[b][1])}") y_dist_diff1 += abs(points[a][1] - points[b][1]) sign=0 y_dist_diff2 = 0 for i in range(len(points_change)-1): sign = (sign+1)%2 a, b = points_change[i][sign], points_change[i+1][(sign)] # print(f"{a} -> {b} {points[a], points[b]=} {abs(points[a][1] - points[b][1])}") y_dist_diff2 += abs(points[a][1] - points[b][1]) total1=x_dist+ y_dist_same+y_dist_diff1 total2=x_dist+ y_dist_same+y_dist_diff2 # print(f"{y_dist_diff1, y_dist_diff2=} {x_dist=}, {y_dist_same=}") # print(f"{total1, total2=}") print(min(total1, total2))