#include <bits/stdc++.h>
#pragma GCC optimize("O3")
#pragma GCC target("sse4")
using namespace std;
struct Point {
  long long x, y;
  bool operator<(const Point &p) const {
    if (x != p.x) return x < p.x;
    return y < p.y;
  }
  bool operator==(const Point &p) const { return x == p.x && y == p.y; }
};
int n;
Point orig[2505];
Point a[2505];
Point cur;
int ccw(Point a, Point b, Point c) {
  long long dx1 = b.x - a.x;
  long long dy1 = b.y - a.y;
  long long dx2 = c.x - a.x;
  long long dy2 = c.y - a.y;
  if (dx1 * dy2 > dy1 * dx2) return 1;
  if (dx1 * dy2 < dy1 * dx2) return -1;
  if ((dx1 * dx2 < 0) || (dy1 * dy2 < 0)) return -1;
  if ((dx1 * dx1 + dy1 * dy1) < (dx2 * dx2 + dy2 * dy2)) return 1;
  return 0;
}
bool ndf(Point a) { return a.y < cur.y || (a.y == cur.y && a.x < cur.x); }
Point ref(Point a) {
  a.y = cur.y * 2 - a.y;
  a.x = cur.x * 2 - a.x;
  return a;
}
bool comp(Point a, Point b) {
  if (a == cur) return false;
  if (b == cur) return true;
  if (ndf(a)) a = ref(a);
  if (ndf(b)) b = ref(b);
  return ccw(b, cur, a) == 1;
}
long long c3(long long x) { return x * (x - 1) * (x - 2) / 6; }
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cin >> n;
  for (int i = 0; i < (signed)(n); i++) {
    cin >> a[i].x >> a[i].y;
    orig[i] = a[i];
  }
  long long bd = 0;
  for (int i = 0; i < (signed)(n); i++) {
    cur = orig[i];
    sort(a, a + n, comp);
    long long bot = 0;
    long long top = 0;
    for (int j = 0; j < (signed)(n - 1); j++) {
      if (ndf(a[j])) {
        ++top;
      } else {
        ++bot;
      }
    }
    for (int j = 0; j < (signed)(n - 1); j++) {
      if (ndf(a[j])) {
        --top;
      } else {
        --bot;
      }
      bd += c3(bot);
      bd += c3(top);
      if (ndf(a[j])) {
        ++bot;
      } else {
        ++top;
      }
    }
  }
  long long tot = n * (n - 1) * c3(n - 2) / 4;
  cout << tot - bd / 2 << "\n";
  return 0;
}
