#include <bits/stdc++.h>
using namespace std;
long long n;
int gcd(int a, int b) { return b == 0 ? a : gcd(b, a % b); }
struct xian {
  int fz, fm, fzh, fmh;
} a[5005];
bool cmp(xian x, xian y) {
  if (x.fz == y.fz) {
    return x.fm <= y.fm;
  } else {
    return x.fz < y.fz;
  }
}
int main() {
  cin >> n;
  int x[55], y[55];
  int num = 0;
  for (int i = 0; i < n; i++) {
    cin >> x[i] >> y[i];
  }
  for (int i = 0; i < n; i++) {
    for (int j = i + 1; j < n; j++) {
      a[num].fm = x[i] - x[j];
      a[num].fz = y[i] - y[j];
      int m = gcd(a[num].fm, a[num].fz);
      if (m != 0) a[num].fm /= m, a[num].fz /= m;
      if (a[num].fm == 0) a[num].fz = 1;
      if (a[num].fz == 0) a[num].fm = 1;
      a[num].fmh = a[num].fm;
      a[num].fzh = y[i] * a[num].fm - a[num].fz * x[i];
      m = gcd(a[num].fzh, a[num].fmh);
      if (m != 0) a[num].fzh /= m, a[num].fmh /= m;
      if (a[num].fmh == 0) a[num].fzh = 1;
      if (a[num].fzh == 0) a[num].fmh = 1;
      if (a[num].fm == 0) {
        a[num].fzh = x[i];
      }
      bool f = 1;
      for (int k = 0; k < num; k++) {
        if (a[k].fz == a[num].fz && a[k].fm == a[num].fm &&
            a[k].fmh == a[num].fmh && a[k].fzh == a[num].fzh) {
          f = 0;
          break;
        }
      }
      if (f) num++;
    }
  }
  int ans = 0;
  for (int i = 0; i < num; i++) {
    for (int j = i + 1; j < num; j++) {
      if (a[i].fm != a[j].fm || a[i].fz != a[j].fz) {
        ans++;
      }
    }
  }
  cout << ans << endl;
}
