#include <bits/stdc++.h>
using namespace std;
template <typename Type>
inline bool chkmin(Type &x, const Type &y) {
  return x > y ? (x = y, 1) : 0;
}
template <typename Type>
inline bool chkmax(Type &x, const Type &y) {
  return x < y ? (x = y, 1) : 0;
}
template <typename Type>
inline Type read(Type &f) {
  f = 0;
  int x = 1;
  char c = getchar();
  while (!isdigit(c)) x = (c == '-' ? -1 : 1), c = getchar();
  while (isdigit(c)) (f *= 10) += c & 15, c = getchar();
  return f = x * f;
}
const int N = 3000 + 5;
int n, k, tot, v;
long long Ans;
const double eps = 1e-10, Pi = acos(-1.0);
struct Node {
  double x, y;
} A[N];
double d[N];
int main() {
  read(n);
  for (int i = (1), ___ = (n); i <= ___; ++i) {
    read(v), A[i].x = v;
    read(v), A[i].y = v;
  }
  for (int i = (1), ___ = (n); i <= ___; ++i) {
    tot = 0, k = 1;
    for (int j = (1), ___ = (n); j <= ___; ++j)
      if (i != j) {
        d[++tot] = atan2(A[j].y - A[i].y, A[j].x - A[i].x);
      }
    sort(d + 1, d + 1 + tot);
    for (int j = (1), ___ = (tot); j <= ___; ++j) {
      if (d[j] > eps) break;
      while (k <= tot && d[k] < d[j] + Pi) k++;
      Ans += 1ll * (k - j - 1) * (k - j - 2) * (tot - k + j) *
             (tot - k + j - 1) / 2;
    }
  }
  cout << Ans / 2 << endl;
  return 0;
}
