Rt.#3,#4WA
#include<bits/stdc++.h>
#define max(x, y) (x > y ? x : y)
#define min(x, y) (x < y ? x : y)
struct node{
int x, y;
};
int n, x, y, m;
int ins;
bool mp[500][500];
int dx[4] = {-1, 0, 1, 0};
int dy[4] = {0, 1, 0, -1};
void Bfs(int x, int y) {
std::queue<node> que;
mp[x][y] = true;
que.push({x, y});
while(! que.empty()) {
node fth = que.front();
que.pop(), ins ++;
for(int i = 0; i < 4; i ++) {
node son = {fth.x + dx[i], fth.y + dy[i]};
if(mp[son.x][son.y]) continue;
mp[son.x][son.y] = true, que.push(son);
}
}
}
int main() {
std::cin >> n >> x >> y;
int bgn_x = x, bgn_y = y;
for(int i = 2; i <= n; i ++) {
int lst_x = x, lst_y = y;
std::cin >> x >> y;
for(int u = min(lst_x, x); u <= max(lst_x, x); u ++)
for(int v = min(lst_y, y); v <= max(lst_y, y); v ++)
mp[u + 200][v + 200] = true, m ++;
}
for(int u = min(x, bgn_x); u <= max(x, bgn_x); u ++)
for(int v = min(y, bgn_y); v <= max(y, bgn_y); v ++)
mp[u + 200][v + 200] = true, m ++;
Bfs(bgn_x + 201, bgn_y + 201);
std::cout << (m - n) / 2 + ins - 1;
return 0;
}