#include <bits/stdc++.h>
using namespace std;
bool debug;
struct Pointll {
  long long x, y;
  Pointll(long long _x, long long _y) : x(_x), y(_y) {}
  Pointll() { x = y = 0; }
  bool operator<(const Pointll &p) const {
    return x < p.x || (x == p.x) && y < p.y;
  }
  bool operator==(const Pointll &p) const { return x == p.x && y == p.y; }
};
long long chOrientation(Pointll a, Pointll b, Pointll c) {
  return a.x * (b.y - c.y) + b.x * (c.y - a.y) + c.x * (a.y - b.y);
}
vector<Pointll> convexHull(vector<Pointll> points) {
  if (points.size() == 1) {
    points.push_back(points.back());
    return points;
  }
  sort(points.begin(), points.end());
  Pointll p1 = points[0], p2 = points.back();
  vector<Pointll> upper, lower;
  upper.push_back(p1);
  lower.push_back(p1);
  for (int i = 1; i < points.size(); i++) {
    if (i + 1 == points.size() || chOrientation(p1, points[i], p2) < 0) {
      while (upper.size() >= 2 && chOrientation(upper[upper.size() - 2],
                                                upper.back(), points[i]) >= 0)
        upper.pop_back();
      upper.push_back(points[i]);
    }
    if (i + 1 == points.size() || chOrientation(p1, points[i], p2) > 0) {
      while (lower.size() >= 2 && chOrientation(lower[lower.size() - 2],
                                                lower.back(), points[i]) <= 0)
        lower.pop_back();
      lower.push_back(points[i]);
    }
  }
  vector<Pointll> res;
  for (int i = 0; i < lower.size(); i++) res.push_back(lower[i]);
  for (int i = upper.size() - 2; i >= 0; i--) res.push_back(upper[i]);
  return res;
}
vector<Pointll> convexHullCollinear(vector<Pointll> points) {
  if (points.size() == 1) {
    points.push_back(points.back());
    return points;
  }
  vector<Pointll> points2 = points;
  sort(points2.begin(), points2.end());
  points.clear();
  for (int i = 0; i < points2.size(); i++)
    if (points.empty() || !(points.back() == points2[i]))
      points.push_back(points2[i]);
  Pointll p1 = points[0], p2 = points.back();
  vector<Pointll> upper, lower;
  upper.push_back(p1);
  lower.push_back(p1);
  for (int i = 1; i < points.size(); i++) {
    if (i + 1 == points.size() || chOrientation(p1, points[i], p2) <= 0) {
      while (upper.size() >= 2 && chOrientation(upper[upper.size() - 2],
                                                upper.back(), points[i]) > 0)
        upper.pop_back();
      upper.push_back(points[i]);
    }
    if (i + 1 == points.size() || chOrientation(p1, points[i], p2) > 0) {
      while (lower.size() >= 2 && chOrientation(lower[lower.size() - 2],
                                                lower.back(), points[i]) < 0)
        lower.pop_back();
      lower.push_back(points[i]);
    }
  }
  vector<Pointll> res;
  for (int i = 0; i < lower.size(); i++) res.push_back(lower[i]);
  for (int i = upper.size() - 2; i >= 0; i--) res.push_back(upper[i]);
  return res;
}
int main(int argc, char *argv[]) {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  debug = argc > 1;
  int n, x, y;
  cin >> n;
  vector<Pointll> polygon;
  for (int i = 0; i < n; i++) {
    cin >> x >> y;
    polygon.emplace_back(x, y + 1);
    polygon.emplace_back(x, y - 1);
    polygon.emplace_back(x + 1, y);
    polygon.emplace_back(x - 1, y);
  }
  auto ch = convexHull(polygon);
  long long dist = 0;
  for (int i = 0; i + 1 < ch.size(); i++) {
    dist += max(abs(ch[i].x - ch[i + 1].x), abs(ch[i].y - ch[i + 1].y));
  }
  cout << dist << endl;
  return 0;
}
