#include using ll = long long; using namespace std; struct MinMax{ ll x; ll max, min; }; map m; int main() { ll n; cin >> n; for(int i = 0; i < n ;i++){ ll x, y; cin >> x >> y; auto found = m.find(x); if(found != m.end()){ //je tam found->second.max = max(found->second.max, y); found->second.min = min(found->second.min, y); } else{ m.insert({x, MinMax{x,y, y}}); } } vector minMax; for(auto & i : m) { minMax.emplace_back(i.second); } ll point_y = minMax[0].min; ll point_x = minMax[0].x; ll result_max = minMax[0].max - minMax[0].min; for(int i = 1; i < minMax.size(); i++){ result_max += minMax[i].max - minMax[i].min; result_max += minMax[i].x - point_x; if(abs(point_y - minMax[i].max) < abs(point_y - minMax[i].min)){ result_max += abs(point_y - minMax[i].max); point_y = minMax[i].min; } else{ result_max += abs(point_y - minMax[i].min); point_y = minMax[i].max; } point_x = minMax[i].x; } point_y = minMax[0].max; point_x = minMax[0].x; ll result_min = minMax[0].max - minMax[0].min; for(int i = 1; i < minMax.size(); i++){ result_min += minMax[i].max - minMax[i].min; result_min += minMax[i].x - point_x; if(abs(point_y - minMax[i].max) < abs(point_y - minMax[i].min)){ result_min += abs(point_y - minMax[i].max); point_y = minMax[i].min; } else{ result_min += abs(point_y - minMax[i].min); point_y = minMax[i].max; } point_x = minMax[i].x; } cout << min(result_max, result_min) << endl; }