#include <bits/stdc++.h>
using namespace std;
struct Point {
  long long x, y;
  Point(long long x_, long long y_) {
    x = x_;
    y = y_;
  }
  Point() {}
  Point operator-(const Point &other) const {
    return Point(x - other.x, y - other.y);
  }
  long long dist(const Point &other) const {
    long long dx = x - other.x;
    long long dy = y - other.y;
    return dx * dx + dy * dy;
  }
  friend long long operator*(const Point &a, const Point &b) {
    return a.x * b.y - a.y * b.x;
  }
};
long long up(const Point &a) { return a.y > 0 || (a.y == 0 && a.x >= 0); }
long long solve(long long n, vector<Point> poly, Point to) {
  auto cmp = [&](const Point &a, const Point &b) {
    Point f = a - to;
    Point s = b - to;
    if (up(f) == up(s)) {
      return f * s > 0;
    } else {
      return up(f) < up(s);
    }
  };
  sort(poly.begin(), poly.end(), cmp);
  long long ans = (n * (n - 1) * (n - 2)) / 6;
  for (long long i = 0; i < n; i++) {
    long long rs = 0;
    {
      long long l = 1;
      long long r = n;
      while (r - l > 1) {
        long long m = (r + l) >> 1;
        if ((poly[(i + m) % n] - poly[i]) * (to - poly[i]) >= 0) {
          l = m;
        } else {
          r = m;
        }
      }
      rs = l;
    }
    long long len = rs;
    ans -= (len) * (len - 1) / 2;
  }
  assert(ans >= 0);
  return ans;
}
signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  long long n;
  cin >> n;
  vector<Point> poly(n);
  for (auto &t : poly) {
    cin >> t.x >> t.y;
  }
  long long ans = 0;
  for (long long i = 0; i < n; i++) {
    auto np = poly;
    np.erase(np.begin() + i);
    ans += solve(n - 1, np, poly[i]);
  }
  cout << ans * (n - 4) / 2 << endl;
}
