#include <bits/stdc++.h>
using namespace std;
const int dx[4] = {0, 1, 0, -1};
const int dy[4] = {1, 0, -1, 0};
set<pair<int, int>> points;
int perimeter = 0;
void dfs(int x, int y, int dir, int start_x, int start_y, bool first_call) {
if (x == start_x && y == start_y && !first_call) {
return;
}
int right_dir = (dir + 1) % 4;
int nx_right = x + dx[right_dir];
int ny_right = y + dy[right_dir];
if (points.find({nx_right, ny_right}) == points.end()) {
dir = right_dir;
} else {
nx_right = x + dx[dir];
ny_right = y + dy[dir];
if (points.find({nx_right, ny_right}) != points.end()) {
dir = (dir + 3) % 4;
perimeter++;
dfs(x, y, dir, start_x, start_y, false);
return;
}
}
x += dx[dir];
y += dy[dir];
right_dir = (dir + 1) % 4;
nx_right = x + dx[right_dir];
ny_right = y + dy[right_dir];
if (points.find({nx_right, ny_right}) != points.end()) {
perimeter++;
}
dfs(x, y, dir, start_x, start_y, false);
}
int main() {
int n;
cin >> n;
int min_x = INT_MAX, min_y = INT_MAX;
for (int i = 0; i < n; ++i) {
int x, y;
cin >> x >> y;
points.insert({x, y});
if (x < min_x || (x == min_x && y < min_y)) {
min_x = x;
min_y = y;
}
}
int start_x = min_x - 1;
int start_y = min_y;
dfs(start_x, start_y, 0, start_x, start_y, true);
cout << perimeter << endl;
return 0;
}