#include <bits/stdc++.h>
using namespace std;
namespace geometry {
constexpr long double eps = 1e-7;
int sign(long double k) {
  if (k > eps)
    return 1;
  else if (k < -eps)
    return -1;
  return 0;
}
int cmp(long double k1, long double k2) { return sign(k1 - k2); }
int inmid(long double k1, long double k2, long double k3) {
  return sign(k1 - k3) * sign(k2 - k3) <= 0;
}
struct point {
  long long x, y;
  point() {}
  point(long double x_, long double y_) : x(x_), y(y_) {}
  point operator+(const point& k) const { return point(k.x + x, k.y + y); }
  point operator-(const point& k) const { return point(x - k.x, y - k.y); }
  point operator*(long double k) const { return point(x * k, y * k); }
  point operator/(long double k1) const { return point(x / k1, y / k1); }
  point turn(long double k1) {
    return point(x * cos(k1) - y * sin(k1), x * sin(k1) + y * cos(k1));
  }
  point turn90() { return point(-y, x); }
  long double len() { return sqrt(x * x + y * y); }
  long long len2() { return x * x + y * y; }
  long double getPolarAngle() { return atan2(y, x); }
  long double dis(point k) { return ((*this) - k).len(); }
  point unit() {
    long double d = len();
    return point(x / d, y / d);
  }
  point getdel() {
    if (sign(x) == -1 || (sign(x) == 0 && sign(y) == -1))
      return (*this) * (-1);
    else
      return (*this);
  }
  bool operator<(const point& k) const { return x == k.x ? y < k.y : x < k.x; }
  bool operator==(const point& k) const { return x == k.x && y == k.y; }
  bool getP() const { return sign(y) == 1 || (sign(y) == 0 && sign(x) == -1); }
};
long long cross(point k1, point k2) { return k1.x * k2.y - k1.y * k2.x; }
long long dot(point k1, point k2) { return k1.x * k2.x + k1.y * k2.y; }
vector<point> convexHull(vector<point> A, int flag = 1) {
  int n = A.size();
  vector<point> ans(n + n);
  sort(A.begin(), A.end());
  int now = -1;
  for (int i = 0; i < A.size(); i++) {
    while (now > 0 &&
           sign(cross(ans[now] - ans[now - 1], A[i] - ans[now - 1])) < flag)
      now--;
    ans[++now] = A[i];
  }
  int pre = now;
  for (int i = n - 2; i >= 0; i--) {
    while (now > pre &&
           sign(cross(ans[now] - ans[now - 1], A[i] - ans[now - 1])) < flag)
      now--;
    ans[++now] = A[i];
  }
  ans.resize(now);
  return ans;
}
}  // namespace geometry
using namespace geometry;
int32_t main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  cout.tie(nullptr);
  int n;
  cin >> n;
  vector<point> p(n);
  vector<point> q;
  for (auto& i : p) {
    cin >> i.x >> i.y;
    q.push_back(i + point(1, 0));
    q.push_back(i + point(-1, 0));
    q.push_back(i + point(0, 1));
    q.push_back(i + point(0, -1));
  }
  auto ch = convexHull(q);
  n = ch.size();
  int res = 0;
  for (int i = 0; i < n; i++) {
    res +=
        max(abs(ch[(i + 1) % n].x - ch[i].x), abs(ch[(i + 1) % n].y - ch[i].y));
  }
  cout << res;
  return 0;
}
