#include <bits/stdc++.h>
using namespace std;
struct Point {
  long long x, y;
  int u, v;
  Point() {}
  Point(long long x, long long y) : x(x), y(y) {}
  Point operator-(const Point& u) { return Point(x - u.x, y - u.y); }
};
long long getCross(Point a, Point b) { return a.x * b.y - a.y * b.x; }
int n;
Point p[305];
long long dp[305][305][7];
bool sgn(Point p) { return p.y < 0 || (p.y == 0 && p.x < 0); }
bool cmp(Point p, Point q) {
  if (sgn(p) != sgn(q)) return sgn(p) < sgn(q);
  return getCross(p, q) > 0;
}
vector<Point> edges;
int main() {
  cin >> n;
  for (int i = 0; i < n; i++) scanf("%lld %lld", &p[i].x, &p[i].y);
  for (int i = 0; i < n; i++) {
    dp[i][i][0] = 1;
    for (int j = 0; j < n; j++) {
      if (i == j) continue;
      edges.push_back(p[j] - p[i]);
      edges.back().u = i;
      edges.back().v = j;
    }
  }
  sort(edges.begin(), edges.end(), cmp);
  long long ans = 0;
  for (auto e : edges)
    for (int u = 0; u < n; u++)
      for (int k = 1; k <= 5; k++) dp[u][e.v][k] += dp[u][e.u][k - 1];
  for (int i = 0; i < n; i++) ans += dp[i][i][5];
  cout << ans << endl;
  return 0;
}
