#include <bits/stdc++.h>
using namespace std;
long long sqr(int x) { return 1LL * x * x; }
int sgn(long long cur) {
  if (cur == 0) return 0;
  return cur > 0 ? 1 : -1;
}
struct PT {
  int x, y;
  PT(int x = 0, int y = 0) : x(x), y(y) {}
  void in() { cin >> x >> y; }
};
PT operator+(PT p1, PT p2) { return PT(p1.x + p2.x, p1.y + p2.y); }
PT operator-(PT p1, PT p2) { return PT(p1.x - p2.x, p1.y - p2.y); }
long long dis2(PT p) { return sqr(p.x) + sqr(p.y); }
long long vect(PT p1, PT p2) { return 1LL * p1.x * p2.y - 1LL * p1.y * p2.x; }
long long vect(PT p, PT p1, PT p2) { return vect(p1 - p, p2 - p); }
bool cmp(PT a, PT b) {
  if (a.y >= 0 && b.y < 0) return 1;
  if (a.y < 0 && b.y >= 0) return 0;
  if (a.y == 0 && b.y == 0) {
    if (a.x >= 0 && b.x < 0)
      return 1;
    else
      return 0;
  }
  return vect(a, b) > 0;
}
const int N = 2200;
PT p[N], q[N + N];
long long ans = 0;
int main() {
  ios_base::sync_with_stdio(0);
  int n;
  cin >> n;
  for (int i = 0; i < n; i++) p[i].in();
  long long ans = 0;
  for (int i = 0; i < n; i++) {
    int qn = 0;
    for (int j = 0; j < n; j++) {
      if (i == j) continue;
      q[qn++] = p[j] - p[i];
    }
    sort(q, q + qn, cmp);
    for (int j = 0; j < qn; j++) q[qn + j] = q[j];
    for (int j = 0, k = 1; j < qn; j++) {
      while (j == k || vect(q[j], q[k]) > 0) {
        k++;
      }
      int x = (k - j - 1), y = (n - 2 - (k - j - 1));
      ans += 1LL * x * (x - 1) / 2 * y * (y - 1) / 2;
    }
  }
  cout << ans / 2 << endl;
}
