func_code_string: #include <bits/stdc++.h>   using namespace std;   long long gcd(long long a, long long b) { return b == 0 ? a : gcd(b, a % b); }   const int MAXN = 2500;   struct P {     int x, y;     P() {}     P(int x, int y) : x(x), y(y) {}   };   long long operator^(const P& a, const P& b) {     return (long long)a.x * b.y - (long long)a.y * b.x;   }   P operator-(const P& a, const P& b) { return P(a.x - b.x, a.y - b.y); }   bool operator<(const P& a, const P& b) {     bool apos = a.y > 0 || a.y == 0 && a.x > 0;     bool bpos = b.y > 0 || b.y == 0 && b.x > 0;     if (apos != bpos) return apos;     return (a ^ b) > 0;   }   int n;   P p[MAXN];   long long C[MAXN + 1][5 + 1];   P q[2 * (MAXN - 1)];   int nq;   long long solve() {     for (int i = (0); i <= (n); ++i)       for (int j = (0); j <= (5); ++j) C[i][j] = 0;     for (int i = (0); i <= (n); ++i) {       C[i][0] = 1;       for (int j = (1); j <= (min(5, i)); ++j)         C[i][j] = C[i - 1][j - 1] + C[i - 1][j];     }     long long cnttot = C[n][5];     long long cntside = 0;     for (int i = (0); i < (n); ++i) {       nq = 0;       for (int j = (0); j < (n); ++j)         if (j != i) q[nq++] = p[j] - p[i];       sort(q, q + nq);       for (int j = (0); j < (nq); ++j) q[nq + j] = q[j];       int to = 0;       for (int at = (0); at < (nq); ++at) {         to = max(to, at + 1);         while (to - at < nq && (q[at] ^ q[to]) > 0) ++to;         int cur = to - at - 1;         cntside += C[cur][3];       }     }     return 5 * cnttot - cntside;   }   void run() {     scanf( %d , &n);     for (int i = (0); i < (n); ++i) scanf( %d%d , &p[i].x, &p[i].y);     printf( %lld n , solve());   }   int main() {     run();     return 0;   }   