#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:67108864")
using namespace std;
int n, x[5000], y[5000], board[300][300];
bool used[3000][3000];
int main() {
  memset(board, -1, sizeof board);
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    scanf("%d%d", &x[i], &y[i]);
    x[i] += 100;
    y[i] += 100;
    board[x[i]][y[i]] = i;
  }
  long long ans = n;
  ans = ans * (ans - 1) * (ans - 2) / 6;
  for (int i = 0; i < n; i++) {
    for (int j = i + 1; j < n; j++) {
      if (used[i][j]) continue;
      used[i][j] = used[j][i] = true;
      int x1 = x[i], x2 = x[j], y1 = y[i], y2 = y[j];
      if (x1 == x2) {
        for (int c = 0; c <= 200; c++) {
          int k = board[x1][c];
          if (k <= j) continue;
          ans--;
        }
        continue;
      }
      if (y1 == y2) {
        for (int c = 0; c <= 200; c++) {
          int k = board[c][y1];
          if (k <= j) continue;
          ans--;
        }
        continue;
      }
      double kx, b, _x2 = x2 - x1, _y2 = y2 - y1;
      kx = _y2 / _x2;
      _y2 = y2, _x2 = x2;
      b = _y2 - kx * _x2;
      for (int c = 0; c <= 200; c++) {
        double _y = kx * c + b;
        if (_y < -1 || _y > 202) continue;
        double _iy = int(_y);
        double _iy2 = int(_y + 1e-12);
        int yc;
        if (fabs(_iy - _y) < 1e-12)
          yc = int(_iy);
        else if (fabs(_iy2 - _y) < 1e-12)
          yc = int(_iy2);
        else
          continue;
        if (yc < 0 || yc > 200) continue;
        int k = board[c][yc];
        if (k <= j) continue;
        ans--;
      }
    }
  }
  printf("%I64d", ans);
  return 0;
}

### Prompt

Generate a CPP solution to the following problem:

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>
#pragma comment(linker, "/STACK:67108864")
using namespace std;
int n, x[5000], y[5000], board[300][300];
bool used[3000][3000];
int main() {
  memset(board, -1, sizeof board);
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    scanf("%d%d", &x[i], &y[i]);
    x[i] += 100;
    y[i] += 100;
    board[x[i]][y[i]] = i;
  }
  long long ans = n;
  ans = ans * (ans - 1) * (ans - 2) / 6;
  for (int i = 0; i < n; i++) {
    for (int j = i + 1; j < n; j++) {
      if (used[i][j]) continue;
      used[i][j] = used[j][i] = true;
      int x1 = x[i], x2 = x[j], y1 = y[i], y2 = y[j];
      if (x1 == x2) {
        for (int c = 0; c <= 200; c++) {
          int k = board[x1][c];
          if (k <= j) continue;
          ans--;
        }
        continue;
      }
      if (y1 == y2) {
        for (int c = 0; c <= 200; c++) {
          int k = board[c][y1];
          if (k <= j) continue;
          ans--;
        }
        continue;
      }
      double kx, b, _x2 = x2 - x1, _y2 = y2 - y1;
      kx = _y2 / _x2;
      _y2 = y2, _x2 = x2;
      b = _y2 - kx * _x2;
      for (int c = 0; c <= 200; c++) {
        double _y = kx * c + b;
        if (_y < -1 || _y > 202) continue;
        double _iy = int(_y);
        double _iy2 = int(_y + 1e-12);
        int yc;
        if (fabs(_iy - _y) < 1e-12)
          yc = int(_iy);
        else if (fabs(_iy2 - _y) < 1e-12)
          yc = int(_iy2);
        else
          continue;
        if (yc < 0 || yc > 200) continue;
        int k = board[c][yc];
        if (k <= j) continue;
        ans--;
      }
    }
  }
  printf("%I64d", ans);
  return 0;
}

```