#include <bits/stdc++.h>
#pragma GCC target("arch=corei7-avx")
using namespace std;
struct P {
  int x, y;
} p[2020];
P le = (P){-int(1e9 + 7), -1};
P operator-(const P &a, const P &b) { return (P){a.x - b.x, a.y - b.y}; }
long long ddd(const P &a, const P &b) {
  return (long long)a.x * b.x + (long long)a.y * b.y;
}
long long xxx(const P &a, const P &b) {
  return (long long)a.x * b.y - (long long)b.x * a.y;
}
struct OPT {
  P p;
  int fl;
} opt[4040];
bool _Tmp(const P &a) { return a.y ? a.y > 0 : a.x < 0; }
bool cmp(const OPT &a, const OPT &b) {
  bool t1 = _Tmp(a.p), t2 = _Tmp(b.p);
  if (t1 != t2) return t2;
  return xxx(a.p, b.p) > 0;
}
int n, m, cnt;
long long ans;
long long C2(long long x) { return x * (x - 1) / 2; }
int main() {
  cin >> n;
  for (int i = 1; i <= n; ++i) cin >> p[i].x >> p[i].y;
  for (int i = 1; i <= n; ++i) {
    m = cnt = 0;
    for (int j = 1; j <= n; ++j)
      if (j != i) {
        P v = p[j] - p[i];
        cnt += xxx(le, v) > 0;
        opt[++m] = (OPT){v, -1};
        v = p[i] - p[j];
        opt[++m] = (OPT){v, 1};
      }
    sort(opt + 1, opt + m + 1, cmp);
    for (int j = 1; j <= m; ++j) {
      cnt += opt[j].fl;
      if (opt[j].fl == -1) ans += C2(cnt) * C2(n - 2 - cnt);
    }
  }
  cout << ans / 2 << endl;
}
