func_code_string: #include <bits/stdc++.h>   using namespace std;   const double eps = 1e-8;   typedef class Point {    public:     double x, y;     Point(double x = 0.0, double y = 0.0) : x(x), y(y) {}   } Point, Vector;   Point operator-(Point a, Point b) { return Point(a.x - b.x, a.y - b.y); }   double cross(Vector u, Vector v) { return u.x * v.y - u.y * v.x; }   int n;   Point *ps;   inline void init() {     scanf( %d , &n);     ps = new Point[(n + 1)];     for (int i = 1; i <= n; i++) scanf( %lf%lf , &ps[i].x, &ps[i].y);   }   int cnt = 0;   long long res = 0;   pair<double, int> *ar;   bool *vis;   int getNext(int p) {     if (p == cnt) return 1;     return p + 1;   }   inline void solve() {     vis = new bool[(n + 1)];     ar = new pair<double, int>[(n + 1)];     for (int i = 1; i <= n; i++) {       cnt = 0;       for (int j = 1; j <= n; j++)         if (j ^ i) {           Vector dif = ps[j] - ps[i];           ar[++cnt] = make_pair(atan2(dif.y, dif.x), j);         }       sort(ar + 1, ar + cnt + 1);       int p = 1, cntl = 0;       memset(vis, false, sizeof(bool) * (n + 1));       for (int j = 1; j < n; j++) {         Vector dif = ps[ar[j].second] - ps[i];         for (int np = getNext(p);              np != j && cross(dif, ps[ar[np].second] - ps[i]) > 0;              p = np, np = getNext(np))           cntl += !vis[np], vis[np] = true;         res = res + cntl * 1ll * (cntl - 1) / 2 * (n - cntl - 2) * 1ll *                         (n - cntl - 3) / 2;         int np = ar[getNext(j)].second, nj = getNext(j);         if (cross(dif, ps[np] - ps[i]) > 0)           cntl--, vis[nj] = false;         else {           if (p == j) p = getNext(j);         }       }     }     cout << (res >> 1) << endl;   }   int main() {     init();     solve();     return 0;   }   