#include <bits/stdc++.h>
using namespace std;
const int maxn = 2222;
int n;
struct line {
  int x1;
  int y1;
  int x2;
  int y2;
  bool isvertical() const { return x1 == x2; }
  bool operator<(const line& l) const {
    int b1 = isvertical();
    int b2 = l.isvertical();
    if (b1 != b2) return b1 < b2;
    if (b1 && b2) {
      return x1 < l.x1;
    } else {
      int dy1 = y1 - y2, dx1 = x1 - x2;
      int dy2 = l.y1 - l.y2, dx2 = l.x1 - l.x2;
      if (dx1 < 0) dx1 = -dx1, dy1 = -dy1;
      if (dx2 < 0) dx2 = -dx2, dy2 = -dy2;
      if (dy1 * dx2 != dy2 * dx1) return dy1 * dx2 < dy2 * dx1;
      int lhs = y1 * dx1 * dx2 - dy1 * x1 * dx2;
      int rhs = l.y1 * dx1 * dx2 - dy2 * l.x1 * dx1;
      return lhs < rhs;
    }
  }
};
map<line, int> pnts;
map<int, int> n2;
int x[maxn], y[maxn];
long long solve() {
  for (int i = 0; i < n; i++) scanf("%d%d", x + i, y + i);
  if (n <= 2) return 0LL;
  for (int i = 1; i <= n; i++) {
    n2[(i * (i - 1)) / 2] = i;
  }
  pnts.clear();
  for (int i = 0; i < n; i++) {
    for (int j = i + 1; j < n; j++) {
      pnts[{x[i], y[i], x[j], y[j]}]++;
    }
  }
  long long res = 1LL * n * (n - 1) * (n - 2) / 6;
  for (auto it : pnts) {
    int x = n2[it.second];
    if (x >= 3) res -= (1LL * x * (x - 1) * (x - 2)) / 6;
  }
  return res;
}
int main() {
  while (scanf("%d", &n) != EOF) {
    printf("%lld\n", solve());
  }
  return 0;
}
