#include <bits/stdc++.h>
using namespace std;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
struct Point {
  long long x, y;
  Point() : x(), y() {}
  Point(long long _x, long long _y) : x(_x), y(_y) {}
  void scan() { scanf("%lld%lld", &x, &y); }
  Point operator+(const Point &a) const { return Point(x + a.x, y + a.y); }
  Point operator-(const Point &a) const { return Point(x - a.x, y - a.y); }
  long long operator%(const Point &a) const { return x * a.x + y * a.y; }
  long long operator*(const Point &a) const { return x * a.y - y * a.x; }
  bool operator<(const Point &a) const { return *this * a > 0; }
};
long long getC(long long n, long long k) {
  if (k < 0 || k > n) return 0;
  long long res = 1;
  for (int i = 0; i < k; i++) {
    res *= n - i;
    res /= i + 1;
  }
  return res;
}
long long A3 = 0, S = 0;
const int N = 303;
int fenv[N];
void addFenv(int p, int x) {
  for (; p < N; p |= p + 1) fenv[p] += x;
}
int getFenv(int r) {
  int res = 0;
  for (; r >= 0; r = (r & (r + 1)) - 1) res += fenv[r];
  return res;
}
Point a[N];
pair<Point, int> b[N], c[N];
int id[N];
int n;
void solve(Point P, Point Q) {
  int m = 0;
  for (int i = 0; i < n; i++) {
    if ((Q - P) * (a[i] - P) <= 0) continue;
    b[m] = make_pair(a[i] - P, i);
    c[m] = make_pair(a[i] - Q, i);
    m++;
  }
  S += getC(m, 3);
  sort(b, b + m);
  sort(c, c + m);
  for (int i = 0; i < m; i++) id[c[i].second] = i;
  for (int i = 0; i < N; i++) fenv[i] = 0;
  for (int i = 0; i < m; i++) {
    int cur = i - getFenv(id[b[i].second]);
    A3 += getC(cur, 2);
    addFenv(id[b[i].second], 1);
  }
}
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; i++) a[i].scan();
  for (int i = 0; i < n; i++)
    for (int j = 0; j < n; j++)
      if (i != j) solve(a[i], a[j]);
  A3 /= 3;
  S -= 3 * A3 + 4 * (getC(n, 5) - A3);
  printf("%lld\n", S);
  return 0;
}
