#include #include using namespace std; int main() { size_t n = 0; while (cin >> n) { map, size_t> mpi; size_t maxX = 0; size_t maxY = 0; for (size_t i=0; i> x >> y; mpi[pair(x, y)]=0; if (x > maxX) maxX = x; if (y > maxY) maxY = y; } while (true) { size_t max = 0; size_t val = 0; for (auto& pi : mpi) { // //cout << "* pi(" << pi.first.first << "," << pi.first.second << ")\n"; if (!val) val = pi.second; pair p[4]; p[0] = pair(pi.first.first-1,pi.first.second); p[1] = pair(pi.first.first+1,pi.first.second); p[2] = pair(pi.first.first,pi.first.second-1); p[3] = pair(pi.first.first,pi.first.second+1); for (size_t q = 0; q < 4; ++q) { // //cout << "p["<< p[q].first << "," << p[q].second << "]\n"; if (mpi.count(p[q])) { bool empty = pi.second == 0; ++pi.second; if (!empty && mpi[p[q]] == 0) { mpi[p[q]] = 1; if (max == 0) max = 1; } if (pi.second > max) max = pi.second; } } } if (!max) break; map, size_t>::iterator it = mpi.begin(); for (; it != mpi.end();) { //cout << "(" << it->first.first << "," << it->first.second << ")" << it->second; if (max && it->second == max) { it = mpi.erase(it); //cout << "x\n"; max = 0; } else { it->second = 0; ++it; //cout << "*\n"; } } } cout << mpi.size() << "\n"; } return 0; }