#include <bits/stdc++.h>
using namespace std;
const int N = 2001;
const long long MOD = 1e9 + 7;
const double eps = 1e-9;
struct point {
  int x, y;
  point(){};
  point(int x, int y) {
    this->x = x;
    this->y = y;
  }
  point operator-(const point &o) const {
    point res;
    res.x = x - o.x;
    res.y = y - o.y;
    return res;
  }
  long long operator*(const point &o) const {
    return 1ll * x * o.y - 1ll * y * o.x;
  }
  double angle() { return atan2(y, x); }
} p[N];
int n;
vector<pair<double, point> > v;
inline long long nC2(long long n) { return n * (n - 1) / 2; }
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; i++) scanf("%lld%lld", &p[i].x, &p[i].y);
  long long ans = 0;
  for (int i = 0; i < n; i++) {
    v.clear();
    for (int j = 0; j < n; j++)
      if (j != i) {
        v.push_back(make_pair(0.0, p[j] - p[i]));
        v.back().first = v.back().second.angle();
      }
    sort(v.begin(), v.end(),
         [](const pair<double, point> &a, const pair<double, point> &b) {
           return a.first < b.first;
         });
    int k = 0, ubove = 0;
    for (int j = 0; j < v.size(); j++) {
      while (1) {
        if ((v[k].second * v[j].second) > 0) break;
        k++;
        ubove++;
        if (k == v.size()) k = 0;
        if (k == j) break;
      }
      ans += nC2(ubove - 1) * nC2(v.size() - ubove);
      ubove--;
    }
  }
  printf("%lld\n", ans / 2);
  return 0;
}
