#include <bits/stdc++.h>
using namespace std;
const int maxn = 2005;
struct point {
  int x, y;
  point() {}
  point(int _x, int _y) : x(_x), y(_y) {}
  point operator-(const point& other) const {
    return point(other.x - x, other.y - y);
  }
  long long operator/(const point& other) const {
    return x * 1LL * other.y - y * 1LL * other.x;
  }
  bool operator<(const point& other) const {
    if (x == other.x) return y < other.y;
    return x < other.x;
  }
};
int n;
point p[maxn];
void read_input() {
  cin >> n;
  for (int i = 0; i < n; ++i) cin >> p[i].x >> p[i].y;
}
bool up(point u) { return u.y > 0 || (u.y == 0 && u.x >= 0); }
bool cmp(point u, point v) {
  if (up(u) == up(v)) return u / v > 0;
  return up(u) > up(v);
}
int calc(int n) { return n * (n - 1) / 2; }
void solve() {
  long long ans = 0;
  for (int i = 0; i < n; ++i) {
    vector<point> points;
    for (int j = 0; j < n; ++j)
      if (i != j) points.push_back(p[i] - p[j]);
    sort(points.begin(), points.end(), cmp);
    int m = n - 1;
    for (int i = 0, j = 0; i < m; ++i) {
      if (i > j) j = i;
      while ((j + 1) % m != i && points[i] / points[(j + 1) % m] > 0) ++j;
      ans += calc(j - i) * 1LL * calc(m - 1 - (j - i));
    }
  }
  cout << ans / 2 << '\n';
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  read_input();
  solve();
}
