#include <bits/stdc++.h>
using namespace std;
template <typename T>
vector<T>& operator--(vector<T>& v) {
  for (auto& i : v) --i;
  return v;
}
template <typename T>
vector<T>& operator++(vector<T>& v) {
  for (auto& i : v) ++i;
  return v;
}
template <typename T>
istream& operator>>(istream& is, vector<T>& v) {
  for (auto& i : v) is >> i;
  return is;
}
template <typename T>
ostream& operator<<(ostream& os, vector<T>& v) {
  for (auto& i : v) os << i << ' ';
  return os;
}
template <typename T, typename U>
istream& operator>>(istream& is, pair<T, U>& p) {
  is >> p.first >> p.second;
  return is;
}
template <typename T, typename U>
ostream& operator<<(ostream& os, pair<T, U>& p) {
  os << p.first << ' ' << p.second;
  return os;
}
template <typename T, typename U>
pair<T, U> operator-(pair<T, U> a, pair<T, U> b) {
  return make_pair(a.first - b.first, a.second - b.second);
}
template <typename T, typename U>
pair<T, U> operator+(pair<T, U> a, pair<T, U> b) {
  return make_pair(a.first + b.first, a.second + b.second);
}
template <typename T, typename U>
void umin(T& a, U b) {
  if (a > b) a = b;
}
template <typename T, typename U>
void umax(T& a, U b) {
  if (a < b) a = b;
}
struct point {
  long long x, y;
  point() {}
  point(long long x, long long y) : x(x), y(y) {}
  point(point a, point b) {
    x = b.x - a.x;
    y = b.y - a.y;
  }
  long long dist(point b) {
    return sqrt((b.x - x) * (b.x - x) + (b.y - y) * (b.y - y));
  }
  long long len() { return sqrt(x * x + y * y); }
  long long slen() { return x * x + y * y; }
  point ort() { return point(-y, x); }
  long long dp(point p) { return x * p.x + y * p.y; }
  long long cp(point p) { return x * p.y - y * p.x; }
  point operator+(point a) { return point(a.x + x, a.y + y); }
  point operator-(point a) { return point(x - a.x, y - a.y); }
  point operator*(long long k) { return point(x * k, y * k); }
  point operator/(long long k) { return point(x / k, y / k); }
  point& norm() {
    long double d = len();
    if (d != 0) {
      x /= d;
      y /= d;
    }
    return *this;
  }
};
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  long long n;
  cin >> n;
  vector<point> v0(n);
  for (int i = 0; i < n; ++i) {
    cin >> v0[i].x >> v0[i].y;
  }
  long long ans = 0;
  for (int i = 0; i < n; ++i) {
    auto p = v0[i];
    vector<point> v = v0;
    v.erase(v.begin() + i);
    for (int j = 0; j < n - 1; ++j) {
      v[j] = v[j] - p;
    }
    sort(v.begin(), v.end(), [&](point a, point b) {
      if (a.y == 0 && a.x > 0) return true;
      if (b.y == 0 && b.x > 0) return false;
      if (a.y == 0) return b.y < 0;
      if (b.y == 0) return a.y > 0;
      if (a.y < 0 && b.y > 0) return false;
      if (a.y > 0 && b.y < 0) return true;
      return a.cp(b) > 0;
    });
    int ind = 0;
    ans += (long long)(n - 1) * (n - 2) * (n - 3) / 6;
    for (int j = 0; j < n - 1; ++j) {
      if (ind == j) ind = (j + 1) % (n - 1);
      while (ind != j && v[j].cp(v[ind]) >= 0) ind = (ind + 1) % (n - 1);
      long long k = ind - j;
      if (k <= 0) k += n - 1;
      k--;
      ans -= k * (k - 1) / 2;
    }
  }
  cout << ans * (n - 4) / 2 << endl;
  return 0;
}
