#include <bits/stdc++.h>
using namespace std;
const int maxn = 6e5 + 10;
const int mod = 1e9 + 7;
int n;
const double pi = 4 * atan(1);
const double eps = 1e-10;
inline int dcmp(double x) {
  if (fabs(x) < eps)
    return 0;
  else
    return x < 0 ? -1 : 1;
}
inline double getDistance(double x, double y) { return sqrt(x * x + y * y); }
inline double torad(double deg) { return deg / 180 * pi; }
struct Point {
  double x, y;
  Point(double x = 0, double y = 0) : x(x), y(y) {}
  void read() { scanf("%lf%lf", &x, &y); }
  void write() { printf("%f %f", x, y); }
  bool operator==(const Point& u) const {
    return dcmp(x - u.x) == 0 && dcmp(y - u.y) == 0;
  }
  bool operator!=(const Point& u) const { return !(*this == u); }
  bool operator<(const Point& u) const {
    return dcmp(x - u.x) < 0 || (dcmp(x - u.x) == 0 && dcmp(y - u.y) < 0);
  }
  bool operator>(const Point& u) const { return u < *this; }
  bool operator<=(const Point& u) const { return *this < u || *this == u; }
  bool operator>=(const Point& u) const { return *this > u || *this == u; }
  Point operator+(const Point& u) { return Point(x + u.x, y + u.y); }
  Point operator-(const Point& u) { return Point(x - u.x, y - u.y); }
  Point operator*(const double u) { return Point(x * u, y * u); }
  Point operator/(const double u) { return Point(x / u, y / u); }
  double operator^(const Point& u) { return x * u.y - y * u.x; }
};
double getCross(Point a, Point b) { return a.x * b.y - a.y * b.x; }
int getConvexHull(Point* p, int n, Point* ch) {
  sort(p, p + n);
  int m = 0;
  for (int i = 0; i < n; i++) {
    while (m > 1 &&
           dcmp(getCross(ch[m - 1] - ch[m - 2], p[i] - ch[m - 1])) <= 0)
      m--;
    ch[m++] = p[i];
  }
  int k = m;
  for (int i = n - 2; i >= 0; i--) {
    while (m > k &&
           dcmp(getCross(ch[m - 1] - ch[m - 2], p[i] - ch[m - 2])) <= 0)
      m--;
    ch[m++] = p[i];
  }
  if (n > 1) m--;
  return m;
}
Point f[maxn], h[maxn];
int main() {
  cin >> n;
  for (int i = 1; i <= n; i++) {
    f[5 * i - 5].read();
    double x = f[5 * i - 5].x;
    double y = f[5 * i - 5].y;
    f[5 * i - 1].x = x + 1;
    f[5 * i - 1].y = y;
    f[5 * i - 2].x = x - 1;
    f[5 * i - 2].y = y;
    f[5 * i - 3].x = x;
    f[5 * i - 3].y = y + 1;
    f[5 * i - 4].x = x;
    f[5 * i - 4].y = y - 1;
  }
  n = getConvexHull(f, 5 * n, h);
  int x = h[0].x;
  int y = h[0].y;
  long long ans = 0;
  h[n + 1] = h[0];
  for (int i = 1; i <= n; i++) {
    int X = abs(h[i].x - x);
    int Y = abs(h[i].y - y);
    x = h[i].x;
    y = h[i].y;
    ans += max(X, Y);
  }
  cout << ans;
  return 0;
}
