#include <bits/stdc++.h>
using namespace std;
int GetQuadrant(pair<long long, long long> A) {
  long long x = A.first;
  long long y = A.second;
  if (x > 0 && y >= 0) return 0;
  if (x <= 0 && y > 0) return 1;
  if (x < 0 && y <= 0) return 2;
  return 3;
}
bool compare_points(pair<long long, long long> A,
                    pair<long long, long long> B) {
  int qA = GetQuadrant(A);
  int qB = GetQuadrant(B);
  if (qA < qB) return true;
  if (qA > qB) return false;
  long long x1 = abs(A.first);
  long long y1 = abs(A.second);
  long long x2 = abs(B.first);
  long long y2 = abs(B.second);
  if (qA == 0 || qA == 2) {
    return (y1 * x2 < x1 * y2);
  }
  if (qA == 1 || qA == 3) {
    return (y1 * x2 > x1 * y2);
  }
  return false;
}
long long X[3333];
long long Y[3333];
long long B(long long x) { return (x * (x - 1)) / 2; }
long long T(long long x) { return (x * (x - 1) * (x - 2)) / 6; }
long long Q(long long x) { return (x * (x - 1) * (x - 2) * (x - 3)) / 24; }
int main() {
  int n;
  cin >> n;
  for (int i = 1; i <= n; i++) cin >> X[i] >> Y[i];
  long long ans = 0;
  for (int i = 1; i <= n; i++) {
    vector<pair<long long, long long>> XY;
    for (int j = 1; j <= n; j++) {
      if (i == j) continue;
      XY.push_back({X[j] - X[i], Y[j] - Y[i]});
    }
    std::sort(XY.begin(), XY.end(), compare_points);
    int numpts = XY.size();
    for (int i = 0; i < numpts; i++) {
      XY.push_back(XY[i]);
    }
    long long curr = 0;
    for (int st = 0; st < numpts; st++) {
      int low = st + 1;
      int high = st + numpts - 1;
      while (low < high) {
        int mid = (low + high + 1) / 2;
        long long x1 = XY[st].first;
        long long y1 = XY[st].second;
        long long x2 = XY[mid].first;
        long long y2 = XY[mid].second;
        if (x1 * y2 - x2 * y1 > 0) {
          low = mid;
        } else {
          high = mid - 1;
        }
      }
      curr += T(low - st);
    }
    ans += Q(numpts) - curr;
  }
  cout << ans << endl;
}
