#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const long double PI = 3.14159265358979323;
struct Point {
  ll x;
  ll y;
  Point() {}
  Point(ll x, ll y) : x(x), y(y) {}
};
ll operator%(const Point &a, const Point &b) { return a.x * b.y - a.y * b.x; }
ll operator*(const Point &a, const Point &b) { return a.x * b.x + a.y * b.y; }
const Point u(0, 1);
bool A(const Point &p) { return u % p > 0 || (u % p == 0 && u * p > 0); }
bool operator<(const Point &a, const Point &b) {
  return (A(a) == A(b) && a % b > 0) || (A(a) && !A(b));
}
Point mas[2503];
Point ab[2503];
ll n, rez;
int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  cin >> n;
  for (int i = (0); i < (n); i++) {
    cin >> mas[i].x >> mas[i].y;
  }
  cout.precision(20);
  rez = n * (n - 1) * (n - 2) * (n - 3) * (n - 4) / 24;
  for (int i = (0); i < (n); i++) {
    for (int j = (0); j < (n); j++) {
      if (i != j) {
        ab[j].x = mas[j].x - mas[i].x;
        ab[j].y = mas[j].y - mas[i].y;
      }
    }
    swap(ab[i], ab[n - 1]);
    sort(ab, ab + n - 1);
    ll k = 0;
    for (int j = (0); j < (n - 1); j++) {
      if (k == j - 1) {
        k++;
      }
      while (true) {
        if (ab[j] % ab[(k + 1) % (n - 1)] <= 0) {
          break;
        }
        k++;
        k %= n - 1;
      }
      ll m = (k - j + n - 1) % (n - 1);
      rez -= m * (m - 1) * (m - 2) / 6;
    }
  }
  cout << rez << "\n";
  return 0;
}
