func_code_string: #include <bits/stdc++.h>   using namespace std;   const int MAXN = 2500 + 10;   int n;   pair<int, int> p[MAXN];   pair<int, int> sec[MAXN];   int sz;   int half(pair<int, int> p) {     assert(p.first || p.second);     return p.second > 0 || (p.second == 0 && p.first < 0);   }   long long dot(pair<int, int> a, pair<int, int> b) {     return 1ll * a.first * b.first + 1ll * a.second * b.second;   }   long long cross(pair<int, int> a, pair<int, int> b) {     return 1ll * a.first * b.second - 1ll * a.second * b.first;   }   int nxt(int x) { return x + 1 == sz ? 0 : x + 1; }   void solve() {     cin >> n;     for (int i = 0; i < n; i++) cin >> p[i].first >> p[i].second;     long long ans = 0;     for (int i = 0; i < n; i++) {       sz = 0;       for (int j = 0; j < n; j++)         if (i ^ j)           sec[sz++] = {p[j].first - p[i].first, p[j].second - p[i].second};       sort(sec, sec + sz, [](pair<int, int> a, pair<int, int> b) {         return make_tuple(half(a), 0, dot(a, b)) <                make_tuple(half(b), cross(a, b), dot(a, b));       });       long long temp = 0;       int cur = 0;       for (int j = 0; j < sz; j++) {         if (cur == j) cur = nxt(j);         while (cur != j && cross(sec[j], sec[cur]) > 0) cur = nxt(cur);         int ln = cur > j ? cur - j : sz - (j - cur);         temp += 1ll * (ln - 1) * (ln - 2) * (ln - 3) / 6;       }       ans += 1ll * (n - 1) * (n - 2) * (n - 3) * (n - 4) / 24 - temp;     }     cout << ans <<   n ;   }   int main() {     ios::sync_with_stdio(false);     cin.tie(0);     cout.tie(0);     int te = 1;     for (int w = 1; w <= te; w++) {       solve();     }     return 0;   }   