func_code_string: #include <bits/stdc++.h>   using namespace std;   struct Point {     long long x, y;     Point(long long x_, long long y_) {       x = x_;       y = y_;     }     Point() {}     Point operator-(const Point &other) const {       return Point(x - other.x, y - other.y);     }     long long dist(const Point &other) const {       long long dx = x - other.x;       long long dy = y - other.y;       return dx * dx + dy * dy;     }     friend long long operator*(const Point &a, const Point &b) {       return a.x * b.y - a.y * b.x;     }   };   long long up(const Point &a) { return a.y > 0 || (a.y == 0 && a.x >= 0); }   long long solve(long long n, vector<Point> poly, Point to) {     auto cmp = [&](const Point &a, const Point &b) {       Point f = a - to;       Point s = b - to;       if (up(f) == up(s)) {         return f * s > 0;       } else {         return up(f) < up(s);       }     };     sort(poly.begin(), poly.end(), cmp);     long long ans = (n * (n - 1) * (n - 2)) / 6;     for (long long i = 0; i < n; i++) {       long long rs = 0;       {         long long l = 1;         long long r = n;         while (r - l > 1) {           long long m = (r + l) >> 1;           if ((poly[(i + m) % n] - poly[i]) * (to - poly[i]) >= 0) {             l = m;           } else {             r = m;           }         }         rs = l;       }       long long len = rs;       ans -= (len) * (len - 1) / 2;     }     assert(ans >= 0);     return ans;   }   signed main() {     ios_base::sync_with_stdio(false);     cin.tie(0);     long long n;     cin >> n;     vector<Point> poly(n);     for (auto &t : poly) {       cin >> t.x >> t.y;     }     long long ans = 0;     for (long long i = 0; i < n; i++) {       auto np = poly;       np.erase(np.begin() + i);       ans += solve(n - 1, np, poly[i]);     }     cout << ans * (n - 4) / 2 << endl;   }   