#include <bits/stdc++.h>
using namespace std;
int n, m;
long long f[305][305][5];
struct point {
  int x, y;
  point(int x = 0, int y = 0) : x(x), y(y) {}
} a[305];
struct edge {
  int u, v;
  double w;
  edge(int u = 0, int v = 0, double w = 0) : u(u), v(v), w(w) {}
  bool operator<(const edge b) const { return w < b.w; }
} s[305 * 305];
int read() {
  char c = getchar();
  int x = 0, s = 1;
  while (!isdigit(c)) {
    if (c == '-') s = -1;
    c = getchar();
  }
  while (isdigit(c)) {
    x = (x << 3) + (x << 1) + c - '0';
    c = getchar();
  }
  return x * s;
}
int main() {
  n = read();
  for (int i = 1; i <= n; ++i) {
    a[i].x = read();
    a[i].y = read();
  }
  for (int i = 1; i <= n; ++i)
    for (int j = 1; j <= n; ++j)
      if (i != j) s[++m] = edge(i, j, atan2(a[i].y - a[j].y, a[i].x - a[j].x));
  sort(s + 1, s + m + 1);
  for (int i = 1; i <= m; ++i) {
    int u = s[i].u, v = s[i].v;
    f[u][v][0] = 1;
    for (int k = 1; k <= 4; ++k)
      for (int j = 1; j <= n; ++j) f[j][v][k] += f[j][u][k - 1];
  }
  long long ans = 0;
  for (int i = 1; i <= n; ++i) ans += f[i][i][4];
  printf("%I64d\n", ans);
}
