#include <bits/stdc++.h>
using namespace std;
template <typename Iter>
ostream& outIt(ostream& out, Iter b, Iter e) {
  for (Iter i = b; i != e; i++) out << (i == b ? "" : " ") << *i;
  return out;
}
template <typename T>
ostream& operator<<(ostream& out, vector<T>& v) {
  return outIt(out << '[', (v).begin(), (v).end()) << ']';
}
template <typename T>
ostream& operator<<(ostream& out, deque<T>& v) {
  return outIt(out << '[', (v).begin(), (v).end()) << ']';
}
template <typename T1, typename T2>
ostream& operator<<(ostream& out, pair<T1, T2> p) {
  return out << '(' << p.first << ", " << p.second << ')';
}
struct point {
  int64_t x, y;
};
point operator-(point a, point b) { return {a.x - b.x, a.y - b.y}; }
point operator-(point a) { return {-a.x, -a.y}; }
point operator+(point a, point b) { return {a.x + b.x, a.y + b.y}; }
bool operator==(point a, point b) { return a.x == b.x && a.y == b.y; }
ostream& operator<<(ostream& out, point a) {
  return out << "P(" << a.x << ", " << a.y << ")";
}
int64_t pos[3][3] = {{5, 4, 3}, {6, -1, 2}, {7, 0, 1}};
int64_t sign(int64_t x) { return x ? x < 0 ? -1 : 1 : 0; }
bool operator<(point a, point b) {
  if (a == b) return false;
  if (pos[sign(a.x) + 1][sign(a.y) + 1] != pos[sign(b.x) + 1][sign(b.y) + 1])
    return pos[sign(a.x) + 1][sign(a.y) + 1] <
           pos[sign(b.x) + 1][sign(b.y) + 1];
  return (a.x * b.x > 0) == (a.y * b.x < b.y * a.x);
}
bool between(point a, point b, point c) {
  if (a < c)
    return a < b && b < c;
  else
    return a < b || b < c;
}
inline int64_t C2(int64_t a) { return a * (a - 1) / 2; }
vector<point> v;
vector<pair<point, int64_t>> u;
vector<vector<int64_t>> ans;
const int64_t mod = 1000000007;
signed main() {
  int64_t n;
  cin >> n;
  for (int64_t i = 0; i < n; i++) {
    int64_t a, b;
    cin >> a >> b;
    v.push_back({a, b});
  }
  ans.resize(n);
  for (int64_t i = 0; i < n; i++) {
    ans[i].resize(n);
    u.resize(0);
    for (int64_t j = 0; j < n; j++)
      if (i != j) u.push_back({v[j] - v[i], j});
    sort((u).begin(), (u).end());
    for (int64_t j = 0, l = 1; j < n - 1; j++) {
      if (l % (n - 1) == j) l++;
      while (between(u[j].first, u[l % (n - 1)].first, -u[j].first)) l++;
      ans[i][u[j].second] = l - j - 1;
    }
  }
  int64_t anses = 0;
  for (int64_t i = 0; i < n; i++)
    for (int64_t j = 0; j < n; j++)
      if (i != j) (anses += C2(ans[i][j]) * C2(n - 2 - ans[i][j]));
  cout << anses / 2 << endl;
}
