#include <bits/stdc++.h>
using namespace std;
map<int, int> magic;
int n;
class cmp {
 public:
  bool operator()(const pair<double, double>& x,
                  const pair<double, double>& y) const {
    if (abs(x.first - y.first) < 1e-7) {
      if (abs(x.second - y.second) < 1e-7) return false;
      return x.second < y.second;
    }
    return x.first < y.first;
  }
};
map<pair<double, double>, int, cmp> m;
vector<pair<int, int>> v;
int main() {
  for (int i = 1; i < 2001; i++) {
    magic[i * (i - 1) / 2] = i;
  }
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    v.push_back(make_pair(x, y));
  }
  for (int i = 0; i < v.size(); i++) {
    for (int j = i + 1; j < v.size(); j++) {
      double difx = v[i].first - v[j].first;
      double dify = v[i].second - v[j].second;
      double r = difx == 0 ? 400 : dify / difx;
      double x = difx == 0
                     ? v[i].first
                     : (double)v[i].first - (double)(v[i].second / dify) * difx;
      if (dify == 0) x = v[i].second;
      auto it = m.find(make_pair(r, x));
      if (it == m.end())
        m[make_pair(r, x)] = 1;
      else
        it->second++;
    }
  }
  long long ans = (long long)n * (n - 1) * (n - 2) / 6;
  for (auto x : m) {
    int num = magic[x.second];
    if (num == 0) {
      printf("!!");
      printf("%lf %lf %d\n", x.first.first, x.first.second, x.second);
    }
    ans -= (long long)num * (num - 1) * (num - 2) / 6;
  }
  printf("%d\n", ans);
}
