#include <bits/stdc++.h>
const int N = 400100;
const int dx[4] = {-1, 0, 0, 1};
const int dy[4] = {0, -1, 1, 0};
class Point {
 public:
  long long x, y;
  Point() : x(), y() {}
  Point(long long x, long long y) : x(x), y(y) {}
  Point operator+(const Point& pt) const { return Point(x + pt.x, y + pt.y); }
  Point operator-(const Point& pt) const { return Point(x - pt.x, y - pt.y); }
  double operator%(const Point& pt) const { return x * pt.y - y * pt.x; }
  bool operator<(const Point& pt) const {
    return x < pt.x || x == pt.x && y < pt.y;
  }
};
int main(void) {
  int n;
  scanf("%d", &n);
  std::vector<Point> a, up, down, res;
  for (int i = 0; i < n; ++i) {
    Point cur;
    scanf("%lld%lld", &cur.x, &cur.y);
    for (int j = 0; j < 4; ++j) {
      a.push_back(cur + Point(dx[j], dy[j]));
    }
  }
  std::sort(a.begin(), a.end());
  up.push_back(a[0]);
  down.push_back(a[0]);
  for (int i = 1; i < (int)a.size(); ++i) {
    if (i == (int)a.size() - 1 || (a.back() - a[0]) % (a[i] - a[0]) >= 0) {
      while (up.size() > 1 &&
             (a[i] - up[(int)up.size() - 1]) %
                     (up[(int)up.size() - 1] - up[(int)up.size() - 2]) <=
                 0) {
        up.pop_back();
      }
      up.push_back(a[i]);
    }
    if (i == (int)a.size() - 1 || (a.back() - a[0]) % (a[i] - a[0]) <= 0) {
      while (down.size() > 1 && (a[i] - down[(int)down.size() - 1]) %
                                        (down[(int)down.size() - 1] -
                                         down[(int)down.size() - 2]) >=
                                    0) {
        down.pop_back();
      }
      down.push_back(a[i]);
    }
  }
  for (auto i : up) {
    res.push_back(i);
  }
  for (int i = (int)down.size() - 2; i >= 0; --i) {
    res.push_back(down[i]);
  }
  long long ans = 0;
  for (int i = 0; i < (int)res.size() - 1; ++i) {
    ans += std::max(llabs(res[i + 1].x - res[i].x),
                    llabs(res[i + 1].y - res[i].y));
  }
  printf("%lld\n", ans);
  return 0;
}
