/* @JUDGE_ID: 32472GK 1034 C++ */ #include #include #include #include #include #include #include #include #include #include using namespace std; typedef pair point; bool is_safe(vector >& q, int N) { vector ng1(2 * N - 1); vector ng2(2 * N - 1); for (int i = 0; i < N; ++i) { int idx1 = q[i].first + q[i].second; int idx2 = q[i].first + (N - q[i].second - 1); if (ng1[idx1] || ng2[idx2]) { return false; } ng1[idx1] = ng2[idx2] = true; } return true; } int solve(vector >& q, int N) { if (N < 3) { return 0; } int cnt = 0; for (int i = 0; i < N; ++i) { for (int j = i + 1; j < N; ++j) { for (int k = j + 1; k < N; ++k) { int xs[] = { q[i].first, q[j].first, q[k].first }; int ys[] = { q[i].second, q[j].second, q[k].second }; q[i] = point(xs[0], ys[1]); q[j] = point(xs[1], ys[2]); q[k] = point(xs[2], ys[0]); if (is_safe(q, N)) { ++cnt; } q[i] = point(xs[0], ys[2]); q[j] = point(xs[1], ys[0]); q[k] = point(xs[2], ys[1]); if (is_safe(q, N)) { ++cnt; } q[i] = point(xs[0], ys[0]); q[j] = point(xs[1], ys[1]); q[k] = point(xs[2], ys[2]); } } } return cnt; } int main() { int N; cin >> N; vector queens(N); for (int i = 0; i < N; ++i) { int x, y; cin >> x >> y; queens[i] = point(x-1, y-1); } sort(queens.begin(), queens.end()); cout << solve(queens, N) << endl; }