#include <bits/stdc++.h>
const int maxn = 2007;
long long C2(int r) { return r * (r - 1ll) / 2; }
struct Point {
  int x, y;
  Point(int x = 0, int y = 0) : x(x), y(y) {}
  Point operator-(const Point &o) const { return Point(x - o.x, y - o.y); }
} P[maxn], Q[maxn];
bool isLeft(Point a, Point b) {
  long long s = b.x * (long long)a.y - a.x * (long long)b.y;
  return s > 0;
}
int N, X[maxn], I;
int getPos(const Point &o) {
  if (o.x == 0 && o.y == 0) return 0;
  if (o.y == 0 && o.x > 0) return 1;
  if (o.y > 0) return 2;
  if (o.y == 0 && o.x < 0) return 3;
  if (o.y < 0) return 4;
}
bool cmp(int a, int b) {
  int posa = getPos(Q[a]), posb = getPos(Q[b]);
  if (posa != posb) return posa < posb;
  return Q[a].x * (long long)Q[b].y > Q[b].x * (long long)Q[a].y;
}
long long solve() {
  long long ret = 0;
  for (int i = 0; i < N; ++i) Q[i] = P[i] - P[I];
  std::sort(X, X + N, cmp);
  int p = 2, cl, cr;
  while (p != 1 && isLeft(Q[X[p]], Q[X[1]])) {
    ++p;
    if (p == N) p = 1;
  }
  if (p == 1) {
    cl = N - 2;
    cr = 0;
  } else {
    cl = p - 2;
    cr = N - p;
  }
  ret += C2(cl) * C2(cr);
  for (int i = 2; i < N; ++i) {
    if (p == i) {
      ++p;
      if (p == N) p = 1;
    } else {
      --cl;
      ++cr;
    }
    while (p != i && isLeft(Q[X[p]], Q[X[i]])) {
      ++p;
      if (p == N) p = 1;
      ++cl;
      --cr;
    }
    ret += C2(cl) * C2(cr);
  }
  return ret;
}
int main() {
  scanf("%d", &N);
  for (int i = 0; i < N; ++i) {
    X[i] = i;
    scanf("%d%d", &P[i].x, &P[i].y);
  }
  long long ans = 0;
  for (int i = 0; i < N; ++i) {
    I = i;
    ans += solve();
  }
  std::cout << ans / 2 << std::endl;
}
