#include <bits/stdc++.h>
using namespace std;
const int DX[] = {-1, +0, +0, +1};
const int DY[] = {+0, -1, +1, +0};
struct Point {
  long long x, y;
  Point(){};
  Point(long long X, long long Y) {
    x = X;
    y = Y;
  }
};
bool operator<(Point a, Point b) {
  if (a.x != b.x) return a.x < b.x;
  return a.y < b.y;
}
struct Vector {
  long long x, y;
  Vector(){};
  Vector(Point a, Point b) {
    x = b.x - a.x;
    y = b.y - a.y;
  }
};
long long dist(Point a, Point b) {
  return (a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y);
}
long long vectorProduct(Vector a, Vector b) { return a.x * b.y - a.y * b.x; }
Point S0;
bool PointCmp(Point a, Point b) {
  long long x = vectorProduct(Vector(S0, a), Vector(S0, b));
  if (x != 0) return x > 0;
  return dist(S0, a) < dist(S0, b);
}
int main() {
  int n;
  scanf("%d", &n);
  vector<Point> P;
  P.reserve(4 * n);
  for (int i = 0; i < n; i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    for (int r = 0; r < 4; r++) P.push_back(Point(x + DX[r], y + DY[r]));
  }
  n = P.size();
  S0 = P[0];
  for (int i = 0; i < n; i++) S0 = min(S0, P[i]);
  sort(P.begin(), P.end(), PointCmp);
  vector<Point> S;
  S.push_back(P[0]);
  S.push_back(P[1]);
  for (int i = 2; i < n; i++) {
    Point u = P[i];
    while (S.size() > 2 &&
           vectorProduct(Vector(S[S.size() - 2], S[S.size() - 1]),
                         Vector(S[S.size() - 1], u)) <= 0)
      S.pop_back();
    S.push_back(u);
  }
  int ans = 0;
  for (int i = 0; i < S.size(); i++) {
    Point a = S[i], b = S[(i + 1) % S.size()];
    int dx = abs(a.x - b.x), dy = abs(a.y - b.y);
    ans += max(dx, dy);
  }
  cout << ans << endl;
  return 0;
}
