#include <bits/stdc++.h>
using namespace std;
int x[2000];
int y[2000];
long long gcd(long long u, long long v) {
  while (v != 0) {
    long long r = u % v;
    u = v;
    v = r;
  }
  return u;
}
struct S {
  int v[6];
  bool operator<(const S& b) const {
    int i;
    for (i = 0; i < 6; i++)
      if (v[i] != b.v[i]) break;
    if (i == 6) return false;
    return v[i] < b.v[i];
  }
};
int main() {
  long long n, i, j;
  cin >> n;
  for (i = 0; i < n; i++) scanf("%d%d", x + i, y + i);
  map<S, int> m;
  for (i = 0; i < n; i++)
    for (j = i + 1; j < n; j++) {
      int A, B, C;
      A = x[i] - x[j];
      B = y[i] - y[j];
      C = y[j] * (x[i] - x[j]) - x[j] * (y[i] - y[j]);
      if (A < 0 || ((A == 0 && B < 0) || (A == 0 && B == 0 && C < 0)))
        A = -A, B = -B, C = -C;
      int sum = abs(A) + abs(B) + abs(C);
      S s;
      int g1 = gcd(abs(A), sum);
      int g2 = gcd(abs(B), sum);
      int g3 = gcd(abs(C), sum);
      s.v[0] = A / g1;
      s.v[1] = B / g2;
      s.v[2] = C / g3;
      s.v[3] = sum / g1;
      s.v[4] = sum / g2;
      s.v[5] = sum / g3;
      if ((m.find(s) != m.end())) {
        m[s]++;
      } else
        m[s] = 1;
    }
  long long res = n * (n - 1) * (n - 2);
  res /= 6;
  for (auto p : m) {
    int a = (1 + sqrt(1 + p.second * 8)) / 2;
    a = a * (a - 1) * (a - 2);
    a /= 6;
    res -= a;
  }
  cout << res << endl;
  return 0;
}

### Prompt

Construct a cpp code solution to the problem outlined:

Vanya got bored and he painted n distinct points on the plane. After that he connected all the points pairwise and saw that as a result many triangles were formed with vertices in the painted points. He asks you to count the number of the formed triangles with the non-zero area.

Input

The first line contains integer n (1 ≤ n ≤ 2000) — the number of the points painted on the plane. 

Next n lines contain two integers each xi, yi ( - 100 ≤ xi, yi ≤ 100) — the coordinates of the i-th point. It is guaranteed that no two given points coincide.

Output

In the first line print an integer — the number of triangles with the non-zero area among the painted points.

Examples

Input

4
0 0
1 1
2 0
2 2


Output

3


Input

3
0 0
1 1
2 0


Output

1


Input

1
1 1


Output

0

Note

Note to the first sample test. There are 3 triangles formed: (0, 0) - (1, 1) - (2, 0); (0, 0) - (2, 2) - (2, 0); (1, 1) - (2, 2) - (2, 0).

Note to the second sample test. There is 1 triangle formed: (0, 0) - (1, 1) - (2, 0).

Note to the third sample test. A single point doesn't form a single triangle.

### Response

```cpp
#include <bits/stdc++.h>
using namespace std;
int x[2000];
int y[2000];
long long gcd(long long u, long long v) {
  while (v != 0) {
    long long r = u % v;
    u = v;
    v = r;
  }
  return u;
}
struct S {
  int v[6];
  bool operator<(const S& b) const {
    int i;
    for (i = 0; i < 6; i++)
      if (v[i] != b.v[i]) break;
    if (i == 6) return false;
    return v[i] < b.v[i];
  }
};
int main() {
  long long n, i, j;
  cin >> n;
  for (i = 0; i < n; i++) scanf("%d%d", x + i, y + i);
  map<S, int> m;
  for (i = 0; i < n; i++)
    for (j = i + 1; j < n; j++) {
      int A, B, C;
      A = x[i] - x[j];
      B = y[i] - y[j];
      C = y[j] * (x[i] - x[j]) - x[j] * (y[i] - y[j]);
      if (A < 0 || ((A == 0 && B < 0) || (A == 0 && B == 0 && C < 0)))
        A = -A, B = -B, C = -C;
      int sum = abs(A) + abs(B) + abs(C);
      S s;
      int g1 = gcd(abs(A), sum);
      int g2 = gcd(abs(B), sum);
      int g3 = gcd(abs(C), sum);
      s.v[0] = A / g1;
      s.v[1] = B / g2;
      s.v[2] = C / g3;
      s.v[3] = sum / g1;
      s.v[4] = sum / g2;
      s.v[5] = sum / g3;
      if ((m.find(s) != m.end())) {
        m[s]++;
      } else
        m[s] = 1;
    }
  long long res = n * (n - 1) * (n - 2);
  res /= 6;
  for (auto p : m) {
    int a = (1 + sqrt(1 + p.second * 8)) / 2;
    a = a * (a - 1) * (a - 2);
    a /= 6;
    res -= a;
  }
  cout << res << endl;
  return 0;
}

```