#include #include #include #include #include #include #include using namespace std; using ll = long long; #define umap unordered_map #define uset unordered_set #define int ll namespace std { template struct hash> { size_t operator()(const pair &a) const { return std::hash()(a.first) ^ (std::hash()(a.second) << 10); } }; } signed main() { int cunt = 0; cin >> cunt; pair c; vector> nodes; for (int i = 0; i < cunt; ++i) { cin >> c.first; cin >> c.second; nodes.push_back(c); } std::sort(nodes.begin(), nodes.end()); priority_queue>> q; auto current = nodes[0]; size_t index = 0; while (nodes[index] == current) { q.emplace(0, pair{index, 1}); index++; } while (!q.empty()) { auto kekel = q.top(); q.pop(); if(kekel.second.second == nodes.size()-1){ cout << kekel.first << endl; break; } size_t next = kekel.second.first + 1; size_t nextest = kekel.second.first + 1; while (nextest < nodes.size() && nodes[next].first == nodes[nextest].first) { q.emplace( kekel.first + abs(nodes[nextest].second - nodes[kekel.second.first].second) + abs(nodes[nextest].first - nodes[kekel.second.first].first), pair{next, kekel.second.first + 1}); nextest++; } } return 0; }