#include <bits/stdc++.h>
using namespace std;
int Gcd(int x, int y) {
  while (x > 0 && y > 0) {
    if (x > y) {
      x = x % y;
    } else {
      y = y % x;
    }
  }
  return x + y;
}
int Sign(int x) { return (x > 0) ? 1 : -1; }
int Abs(int x) { return (x > 0) ? x : -x; }
void ReduceFraction(int& x, int& y) {
  if (x == 0) {
    y = 1;
  } else if (y == 0) {
    x = 1;
  } else {
    int sgn = Sign(x) * Sign(y);
    x = Abs(x);
    y = Abs(y);
    int g = Gcd(x, y);
    x /= g;
    y /= g;
    x *= sgn;
  }
}
struct Vector {
  Vector(int vx, int vy) {
    ReduceFraction(vx, vy);
    x = vx;
    y = vy;
  }
  int x;
  int y;
  bool operator==(const Vector& other) const {
    return (x == other.x) && (y == other.y);
  }
};
struct Line {
  Line(int x0, int y0, int x1, int y1) : a(x1 - x0, y1 - y0) {
    if (a.y != 0) {
      u = a.y * x0 - a.x * y0;
      v = a.y;
      ReduceFraction(u, v);
    } else {
      u = y0;
      v = 10001;
    }
  }
  int u;
  int v;
  Vector a;
  bool operator==(const Line& other) const {
    return (u == other.u) && (v == other.v) && (a == other.a);
  }
};
struct VectorHasher {
  size_t operator()(Vector v) const {
    const size_t coef = 39916801;
    const hash<int> int_hasher;
    return coef * int_hasher(v.x) + int_hasher(v.y);
  }
};
struct LineHasher {
  size_t operator()(const Line& l) const {
    const size_t coef = 514229;
    const hash<int> int_hasher;
    const VectorHasher vector_hasher;
    return coef * coef * int_hasher(l.u) + coef * int_hasher(l.v) +
           vector_hasher(l.a);
  }
};
long long Cn2(long long n) { return n * (n - 1) / 2; }
int main() {
  int n;
  cin >> n;
  vector<pair<int, int>> pts(n);
  for (int i = 0; i < n; ++i) {
    cin >> pts[i].first >> pts[i].second;
  }
  unordered_map<Vector, unordered_set<Line, LineHasher>, VectorHasher> store;
  for (int i = 0; i + 1 < n; ++i) {
    for (int j = i + 1; j < n; ++j) {
      Line new_line(pts[i].first, pts[i].second, pts[j].first, pts[j].second);
      store[new_line.a].insert(new_line);
    }
  }
  long long result = 0;
  long long count = 0;
  for (const auto& p : store) {
    result -= Cn2(p.second.size());
    count += p.second.size();
  }
  cout << result + Cn2(count);
  return 0;
}
