#include <bits/stdc++.h>
using namespace std;
int n;
long long ans;
struct point {
  int x, y;
  double si;
} s[2505], tmp[2 * 2505];
long long cross(point A, point B) {
  return (long long)A.x * B.y - (long long)A.y * B.x;
}
bool cmp(const point &A, const point &B) {
  if (fabs(A.si - B.si) > acos(-1) / 4.0) return A.si < B.si;
  return cross(A, B) > 0;
}
bool check(point A, point B) {
  if (A.si - B.si < acos(-1) / 2.0) return 1;
  if (A.si - B.si > acos(-1) * 3.0 / 2.0) return 0;
  return cross(A, B) < 0;
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) scanf("%d%d", &s[i].x, &s[i].y);
  for (int i = 1; i <= n; i++) {
    int cnt = 0;
    for (int j = 1; j <= n; j++) {
      if (i == j) continue;
      cnt++;
      tmp[cnt].si = atan2(s[j].y - s[i].y, s[j].x - s[i].x);
      tmp[cnt].x = s[j].x - s[i].x;
      tmp[cnt].y = s[j].y - s[i].y;
    }
    for (int j = 1; j < n; j++)
      tmp[++cnt] = tmp[j], tmp[cnt].si += 2 * acos(-1);
    ;
    sort(tmp + 1, tmp + 1 + cnt, cmp);
    int l = 0;
    for (int j = 1; j < n; j++) {
      while (l < cnt && check(tmp[l + 1], tmp[j])) l++;
      int su = l - j;
      ans += (long long)su * (su - 1) * (su - 2) / 6;
    }
  }
  long long tmp = (long long)n * (n - 1) * (n - 2) * (n - 3) * (n - 4) / 120;
  tmp = tmp * 5;
  ans = tmp - ans;
  printf("%lld\n", ans);
  return 0;
}
