func_code_string: #include <bits/stdc++.h>   class state {    public:     int d[4];     int e;     state() : d{0, 0, 0, 0}, e(1) {}     bool operator<(const state &x) const {       for (int i = 0; i < 4; ++i) {         if (d[i] == x.d[i]) continue;         return d[i] > x.d[i];       }       return e > x.e;     }     bool operator!=(const state &x) const {       for (int i = 0; i < 4; ++i)         if (d[i] != x.d[i]) return true;       return e != x.e;     }   };   std::map<state, int> mp;   int main() {     int n;     scanf( %d , &n);     mp[state()] = 0;     while (n--) {       int a, b;       scanf( %d%d , &a, &b);       std::map<state, int> nmp;       for (auto it = mp.begin(); it != mp.end(); ++it) {         if (it->first.d[0] != 0) continue;         state s = it->first;         int t = it->second;         t += abs(a - s.e) + 1;         s.e = a;         s.d[0] = b;         std::sort(s.d, s.d + 4);         auto it2 = nmp.lower_bound(s);         if (it2 == nmp.end() || it2->first != s)           it2 = nmp.insert(it2, std::pair<state, int>(s, t));         it2->second = std::min(it2->second, t);       }       mp.swap(nmp);       0;       for (auto it = mp.begin(); it != mp.end(); ++it) {         0;         for (int i = 0; i < 4; ++i) {           if (!it->first.d[i]) continue;           state s = it->first;           int t = it->second;           t += abs(s.d[i] - s.e) + 1;           s.e = s.d[i];           s.d[i] = 0;           std::sort(s.d, s.d + 4);           auto it2 = mp.lower_bound(s);           if (it2 == mp.end() || it2->first != s)             it2 = mp.insert(it2, std::pair<state, int>(s, t));           it2->second = std::min(it2->second, t);         }       }     }     int ans = ((int)1e9);     for (auto it = mp.begin(); it != mp.end(); ++it) {       if (it->first.d[0] || it->first.d[1] || it->first.d[2] || it->first.d[3])         continue;       ans = std::min(ans, it->second);     }     printf( %d n , ans);     return 0;   }   