#include <bits/stdc++.h>
using namespace std;
const int maxn = 3000;
struct point {
  point(long long _x = 0, long long _y = 0) { x = _x, y = _y; }
  bool operator<(const point& rhs) const {
    if ((*this).det(rhs) == 0) return x < rhs.x;
    return ((*this).det(rhs) > 0) ^ (rhs.x < 0) ^ (x < 0);
  }
  point operator-(const point& rhs) const {
    return point(x - rhs.x, y - rhs.y);
  }
  long long det(const point& rhs) const { return x * rhs.y - y * rhs.x; }
  long long x, y;
};
point arr[maxn + 5], a[maxn + 5];
int n, cnt[2], pos[maxn + 5];
long long res;
int count(int id) { return cnt[id] * (cnt[id] - 1) / 2; }
long long solve(int id) {
  memset(cnt, 0, sizeof(cnt));
  long long ans = 0;
  int m = 0;
  for (int i = 1; i <= n; ++i) {
    if (i == id) continue;
    a[++m] = arr[i] - arr[id];
  }
  sort(a + 1, a + 1 + m);
  for (int i = 1; i <= m; ++i) {
    if (a[i].x >= 0)
      pos[i] = 0;
    else
      pos[i] = 1;
    cnt[pos[i]] += 1;
  }
  for (int i = 1; i <= m; ++i) {
    cnt[pos[i]] -= 1;
    ans += 1ll * count(0) * count(1);
    cnt[pos[i] ^= 1] += 1;
  }
  return ans;
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; ++i) scanf("%lld %lld", &arr[i].x, &arr[i].y);
  for (int i = 1; i <= n; ++i) res += solve(i);
  printf("%lld\n", res / 2);
  return 0;
}
