#include <bits/stdc++.h>
#pragma GCC optimize("O3")
using namespace std;
struct point {
  long long x, y;
  point() {}
  point(long double x, long double y) : x(x), y(y) {}
  long double kampas() {
    long double alfa = atan2(y, x);
    if (y < 0) alfa += 10;
    return alfa;
  }
};
point operator!(const point &a) { return point(a.x, -a.y); }
point operator+(const point &a, const point &b) {
  return point(a.x + b.x, a.y + b.y);
}
point operator-(const point &a, const point &b) {
  return point(a.x - b.x, a.y - b.y);
}
point operator*(const point &a, const point &b) {
  return point(a.x * b.x - a.y * b.y, a.x * b.y + a.y * b.x);
}
point operator*(point a, long double k) { return point(a.x * k, a.y * k); }
long long dot(const point &a, const point &b) { return a.x * b.x + a.y * b.y; }
long long cross(const point &a, const point &b) {
  return a.x * b.y - a.y * b.x;
}
long long sgn(long long x) {
  if (x < 0) return -1;
  if (x > 0) return 1;
  return 0;
}
bool x(point a, point b, point c, point d) {
  return sgn(cross(b - a, c - a)) * sgn(cross(b - a, d - a)) == -1 &&
         sgn(cross(d - c, a - c)) * sgn(cross(d - c, b - c)) == -1;
}
long long fast(long long n, point A[]) {
  long long ans = n * (n - 1) * (n - 2) * (n - 3) * (n - 4) / 120;
  long long kampe[n][n][n];
  long long halfpl[n][n];
  for (long long a = 0; a < n; a++) {
    vector<pair<long double, long long>> x;
    for (long long b = 0; b < n; b++) {
      if (b == a) continue;
      x.push_back({(A[b] - A[a]).kampas(), b});
    }
    sort(x.begin(), x.end());
    for (long long b = 0; b < n; b++) {
      if (a == b) continue;
      halfpl[a][b] = 0;
      for (long long c = 0; c < n; c++) {
        if (c == a || c == b) continue;
        if (cross(A[c] - A[a], A[b] - A[a]) < 0) halfpl[a][b]++;
      }
      int i = -1000;
      for (int j = 0; j < (int)x.size(); j++)
        if (x[j].second == b) i = j;
      rotate(x.begin(), x.begin() + i, x.end());
      long long kiek = 0;
      for (int j = 1; j < (int)x.size(); j++) {
        kampe[a][b][x[j].second] = kiek;
        kiek++;
      }
    }
  }
  long long minus = 0;
  for (long long a = 0; a < n; a++) {
    for (long long b = 0; b < a; b++) {
      for (long long c = 0; c < a; c++) {
        if (cross(A[c] - A[a], A[b] - A[a]) >= 0) continue;
        long long kiek = n + kampe[a][b][c] + kampe[b][c][a] + kampe[c][a][b] -
                         halfpl[a][b] - halfpl[b][c] - halfpl[c][a];
        minus += kiek *
                 (kampe[a][b][c] + kampe[b][c][a] + kampe[c][a][b] - 3 * kiek);
        ans -= kiek * (kiek - 1) / 2;
      }
    }
  }
  ans -= minus / 2;
  return ans;
}
int main() {
  ios_base::sync_with_stdio(false);
  long long n;
  cin >> n;
  point A[n];
  for (long long i = 0; i < n; i++) cin >> A[i].x >> A[i].y;
  sort(A, A + n, [&](point a, point b) { return a.x < b.x; });
  cout << fast(n, A) << "\n";
}
