#include <bits/stdc++.h>
using namespace std;
const double PI = 3.1415926535897932384626433832795;
const long long INF = 1LL << 62;
const long long MINF = -1LL << 62;
template <typename T>
T getint() {
  T val = 0;
  char c;
  bool neg = false;
  while ((c = getchar()) && !(c >= '0' && c <= '9')) {
    neg |= c == '-';
  }
  do {
    val = (val * 10) + c - '0';
  } while ((c = getchar()) && (c >= '0' && c <= '9'));
  return val * (neg ? -1 : 1);
}
int ccw(pair<long long, long long> a, pair<long long, long long> b,
        pair<long long, long long> c) {
  b.first -= a.first;
  c.first -= a.first;
  b.second -= a.second;
  c.second -= a.second;
  if (b.second * c.first < c.second * b.first) {
    return -1;
  } else if (b.second * c.first == c.second * b.first) {
    return 0;
  }
  return 1;
}
long long sqdist(pair<long long, long long> a, pair<long long, long long> b) {
  return (a.first - b.first) * (a.first - b.first) +
         (a.second - b.second) * (a.second - b.second);
}
vector<pair<long long, long long> > hull(
    vector<pair<long long, long long> > pts) {
  pair<long long, long long> orig;
  bool set = false;
  for (auto i : pts) {
    if (!set) {
      orig = i;
      set = true;
      continue;
    }
    if (orig.first == i.first && orig.second > i.second)
      orig = i;
    else if (orig.first > i.first)
      orig = i;
  }
  pts.erase(find((pts).begin(), (pts).end(), orig));
  sort((pts).begin(), (pts).end(),
       [orig](pair<long long, long long>& a,
              pair<long long, long long>& b) -> bool {
         if (ccw(orig, a, b) == 0) return sqdist(orig, a) < sqdist(orig, b);
         return ccw(orig, a, b) > 0;
       });
  vector<pair<long long, long long> > hull;
  hull.push_back(orig);
  hull.push_back(pts[0]);
  hull.push_back(pts[1]);
  for (int i = 2; i < (int)pts.size(); ++i) {
    hull.push_back(pts[i]);
    while (hull.size() > 3 && ccw(hull[hull.size() - 3], hull[hull.size() - 2],
                                  hull[hull.size() - 1]) < 0) {
      pair<long long, long long> tmp = hull.back();
      hull.pop_back();
      hull.pop_back();
      hull.push_back(tmp);
    }
  }
  return hull;
}
vector<pair<long long, long long> > lst;
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  long long n;
  cin >> n;
  lst.resize(n);
  for (int i = 0; i < n; ++i) cin >> lst[i].first >> lst[i].second;
  long long ans = 0;
  for (int i = 0; i < n; ++i) {
    vector<pair<long long, long long> > bal, jobb;
    pair<long long, long long> fs = (i == 0 ? lst[1] : lst[0]);
    for (int j = 0; j < n; ++j) {
      if (i == j || lst[j] == fs) continue;
      if (ccw(lst[i], fs, lst[j]) > 0) {
        jobb.push_back(lst[j]);
      } else {
        bal.push_back(lst[j]);
      }
    }
    sort(jobb.begin(), jobb.end(),
         [&](pair<long long, long long>& egyik,
             pair<long long, long long>& masik) -> bool {
           return ccw(lst[i], egyik, masik) > 0;
         });
    sort(bal.begin(), bal.end(),
         [&](pair<long long, long long>& egyik,
             pair<long long, long long>& masik) -> bool {
           return ccw(lst[i], egyik, masik) > 0;
         });
    vector<pair<long long, long long> > o;
    o.push_back(fs);
    for (auto i : jobb) o.push_back(i);
    for (auto i : bal) o.push_back(i);
    pair<long long, long long> orig = lst[i];
    int len = 1;
    long long tris = (n - 1) * (n - 2) * (n - 3) / 6;
    for (int i = 0, j = 0; i < (int)(o).size(); ++i) {
      if (len == 0) {
        j = i;
        len = 1;
      }
      while (ccw(o[i], orig, o[j]) <= 0) {
        len++;
        bool volt = (j + 1 - i) % (int)(o).size() == 0;
        j = (j + 1) % (int)(o).size();
        if (volt) break;
      }
      j = (j - 1 + (int)(o).size()) % (int)(o).size();
      len--;
      tris -= (len - 1) * (len - 2) / 2;
      len--;
    }
    ans += tris;
  }
  cout << (ans * (n - 4) / 2) << "\n";
  return 0;
}
