#include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; struct Node { int u; int v; ll dist; Node(int u = -1, int v = -1, ll dist = 0.0) { this->u = u; this->v = v; this->dist = dist; } bool operator>(const Node &n) const { return dist > n.dist; } }; int main() { int N; cin >> N; vector X(N); vector Y(N); for (int i = 0; i < N; ++i) { cin >> X[i] >> Y[i]; } priority_queue , greater> pque; for (int i = 0; i < N; ++i) { ll x1 = X[i]; ll y1 = Y[i]; for (int j = i + 1; j < N; ++j) { ll x2 = X[j]; ll y2 = Y[j]; ll dx = x1 - x2; ll dy = y1 - y2; pque.push(Node(i, j, dx * dx + dy * dy)); } } int ans = 0; bool checked[N]; memset(checked, false, sizeof(checked)); while (!pque.empty()) { Node node = pque.top(); pque.pop(); if (checked[node.u]) continue; if (checked[node.v]) continue; if (node.u == 0) { ++ans; checked[node.v] = true; } else { checked[node.u] = true; checked[node.v] = true; } } cout << ans << endl; return 0; }