#include <bits/stdc++.h>
using namespace std;
long long gcd(long long a, long long b) { return b == 0 ? a : gcd(b, a % b); }
const int MAXN = 2500;
struct P {
  int x, y;
  P() {}
  P(int x, int y) : x(x), y(y) {}
};
long long operator^(const P& a, const P& b) {
  return (long long)a.x * b.y - (long long)a.y * b.x;
}
P operator-(const P& a, const P& b) { return P(a.x - b.x, a.y - b.y); }
bool operator<(const P& a, const P& b) {
  bool apos = a.y > 0 || a.y == 0 && a.x > 0;
  bool bpos = b.y > 0 || b.y == 0 && b.x > 0;
  if (apos != bpos) return apos;
  return (a ^ b) > 0;
}
int n;
P p[MAXN];
long long C[MAXN + 1][5 + 1];
P q[2 * (MAXN - 1)];
int nq;
long long solve() {
  for (int i = (0); i <= (n); ++i)
    for (int j = (0); j <= (5); ++j) C[i][j] = 0;
  for (int i = (0); i <= (n); ++i) {
    C[i][0] = 1;
    for (int j = (1); j <= (min(5, i)); ++j)
      C[i][j] = C[i - 1][j - 1] + C[i - 1][j];
  }
  long long cnttot = C[n][5];
  long long cntside = 0;
  for (int i = (0); i < (n); ++i) {
    nq = 0;
    for (int j = (0); j < (n); ++j)
      if (j != i) q[nq++] = p[j] - p[i];
    sort(q, q + nq);
    for (int j = (0); j < (nq); ++j) q[nq + j] = q[j];
    int to = 0;
    for (int at = (0); at < (nq); ++at) {
      to = max(to, at + 1);
      while (to - at < nq && (q[at] ^ q[to]) > 0) ++to;
      int cur = to - at - 1;
      cntside += C[cur][3];
    }
  }
  return 5 * cnttot - cntside;
}
void run() {
  scanf("%d", &n);
  for (int i = (0); i < (n); ++i) scanf("%d%d", &p[i].x, &p[i].y);
  printf("%lld\n", solve());
}
int main() {
  run();
  return 0;
}
