#include <bits/stdc++.h>
template <typename Y>
inline bool updmin(Y &a, Y b) {
  if (a > b) {
    a = b;
    return 1;
  }
  return 0;
}
template <typename Y>
inline bool updmax(Y &a, Y b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <typename Y>
inline Y abs(Y a) {
  if (a < 0) a = -a;
  return a;
}
template <typename Y>
inline Y sqr(Y a) {
  return a * a;
}
int read() {
  int w = 1, q = 0, ch = ' ';
  for (; ch < '0' || ch > '9'; ch = getchar())
    if (ch == '-') w = -1;
  for (; ch >= '0' && ch <= '9'; ch = getchar()) q = q * 10 + ch - 48;
  return q * w;
}
inline void FileIO() {
  freopen(
      ""
      ".in",
      "r", stdin);
  freopen(
      ""
      ".out",
      "w", stdout);
}
const long double pi = acosl(-1);
const int N = 2020;
int n, dx[N], dy[N], tp;
long double c[N];
int main() {
  n = read();
  for (int i = 1; i <= n; i++) {
    dx[i] = read();
    dy[i] = read();
  }
  long long ans = 0;
  for (int j = 1; j <= n; j++) {
    tp = 0;
    for (int i = 1; i <= n; i++) {
      if (i != j) {
        c[++tp] = atan2l(dy[i] - dy[j], dx[i] - dx[j]);
      }
    }
    std::sort(c + 1, c + 1 + tp);
    for (int i = 1, p = 1; i <= tp; (p == i ? p++ : 0), i++) {
      while (p % tp + 1 != i &&
             c[p % tp + 1] - c[i] + (p % tp + 1 >= i ? 0 : pi * 2) <= pi) {
        p = p % tp + 1;
      }
      int l = (p >= i) ? p - i : p + tp - i, r = n - 2 - l;
      ans += (long long)l * (l - 1) * r * (r - 1) / 4;
    }
  }
  ans /= 2;
  printf("%lld\n", ans);
  return 0;
}
