#include <bits/stdc++.h>
using namespace std;
const int Maxn = 100100;
const int INF = 0x7f7f7f7f;
const double eps = 1e-8;
const double pi = 3.1415926535897932384626433832795;
struct Point {
  double x, y;
  Point() {}
  Point(double x1, double y1) : x(x1), y(y1) {}
  bool operator<(const Point &b) const {
    return x < b.x || (x == b.x && y < b.y);
  }
  double Dist(Point p) {
    return sqrt((x - p.x) * (x - p.x) + (y - p.y) * (y - p.y));
  }
};
bool Cross(Point &p, Point &from, Point &to) {
  return (to.x - from.x) * (p.y - from.y) >= (to.y - from.y) * (p.x - from.x);
}
int Graham(Point pnt[], int n, Point res[]) {
  int len = 0;
  sort(pnt, pnt + n);
  for (int i = 0; i < n; i++) {
    while (len >= 2 && Cross(res[len - 1], res[len - 2], pnt[i])) len--;
    res[len++] = pnt[i];
  }
  for (int i = n - 2, t = len + 1; i >= 0; i--) {
    while (len >= t && Cross(res[len - 1], res[len - 2], pnt[i])) len--;
    res[len++] = pnt[i];
  }
  res[len] = res[0];
  return len;
}
Point p[Maxn], res[Maxn];
int main() {
  set<pair<int, int> > st;
  int n, ans = 0, u, v, cnt = 0;
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    scanf("%d %d", &u, &v);
    if (st.find(pair<int, int>(u, v)) == st.end()) {
      p[cnt].x = u;
      p[cnt++].y = v;
      st.insert(pair<int, int>(u, v));
    }
  }
  cnt = Graham(p, cnt, res);
  for (int i = 0; i < cnt; i++)
    ans += max(abs(res[i].x - res[i + 1].x), abs(res[i].y - res[i + 1].y));
  printf("%d\n", ans + 4);
  return 0;
}
