func_code_string: #include <bits/stdc++.h>   using namespace std;   inline long long read() {     long long x = 0, f = 1;     char c = getchar();     while (c <  0  || c >  9 ) {       if (c ==  - ) f = -1;       c = getchar();     }     while (c >=  0  && c <=  9 ) {       x = (x << 3) + (x << 1) + (c ^ 48);       c = getchar();     }     return f == 1 ? x : -x;   }   inline void print(long long x) {     if (x < 0) putchar( - ), x = ~x + 1;     if (x >= 10) print(x / 10);     putchar((x % 10) | 48);   }   long long n;   struct node {     long long x, y;   } a[2510], v[5010];   long long xiangxian(node x) {     if (x.x >= 0) {       if (x.y >= 0)         return 1;       else         return 4;     } else {       if (x.y >= 0)         return 2;       else         return 3;     }   }   long long cross(node x, node y) { return x.x * y.y - y.x * x.y; }   bool cmp(node x, node y) {     long long x1 = xiangxian(x);     long long x2 = xiangxian(y);     if (x1 != x2)       return x1 < x2;     else       return cross(x, y) > 0;   }   long long ans;   long long C(long long x, long long y) {     if (x < 0) return 0;     long long res = 1;     for (long long i = 1; i <= y; ++i) res *= (x - i + 1);     for (long long i = 1; i <= y; ++i) res /= i;     return res;   }   signed main() {     n = read();     for (long long i = 1; i <= n; ++i) a[i].x = read(), a[i].y = read();     for (long long i = 1; i <= n; ++i) {       long long cnt = 0;       for (long long j = 1; j <= n; ++j) {         if (j == i) continue;         v[++cnt].x = a[j].x - a[i].x;         v[cnt].y = a[j].y - a[i].y;       }       sort(v + 1, v + cnt + 1, cmp);       for (long long j = 1; j <= cnt; ++j) v[j + cnt] = v[j];       long long lst = 1;       for (long long j = cnt + 1; j <= 2 * cnt; ++j) {         while (lst + cnt < j || cross(v[j], v[lst + 1]) >= 0) {           ++lst;           if (lst + 1 == j) break;         }         ans += C(j - lst - 1, 3);       }     }     print(5 * C(n, 5) - ans);   }   