#include <bits/stdc++.h>
using namespace std;
using LL = long long;
using PII = pair<int, int>;
bitset<2001> V[10][10][10][10][10];
int main() {
  int n;
  scanf("%d", &n);
  vector<int> A(n + 1), B(n + 1);
  for (int i = (1); i <= (n); ++i) scanf("%d%d", &A[i], &B[i]);
  queue<array<int, 7>> Q;
  Q.push({0, 0, 0, 0, 1, 0, 0});
  auto getBs = [&](const array<int, 7>& T) -> bitset<2001>& {
    return V[T[0]][T[1]][T[2]][T[3]][T[4]];
  };
  auto add = [&](const array<int, 7>& T) {
    if (getBs(T).test(T[5])) return;
    Q.push(T);
    getBs(T).set(T[5]);
  };
  V[0][0][0][0][1][0] = 1;
  int ans = 1 << 30;
  while (!Q.empty()) {
    auto T = Q.front();
    Q.pop();
    if (T[5] == n && T[3] == 0) {
      ans = min(ans, T[6]);
      continue;
    }
    if (T[4] < 9) {
      auto nT = T;
      nT[6]++;
      nT[4]++;
      add(nT);
    }
    if (T[4] > 1) {
      auto nT = T;
      nT[6]++;
      nT[4]--;
      add(nT);
    }
    for (int i = (0); i <= (3); ++i) {
      if (T[i] == T[4]) {
        auto nT = T;
        nT[i] = 0;
        sort(nT.begin(), nT.begin() + 4);
        nT[6]++;
        add(nT);
        break;
      }
    }
    if (T[0] == 0 && T[4] == A[T[5] + 1]) {
      auto nT = T;
      nT[5]++;
      nT[6]++;
      nT[0] = B[T[5] + 1];
      sort(nT.begin(), nT.begin() + 4);
      add(nT);
    }
  }
  printf("%d\n", ans);
  return 0;
}
