#include <bits/stdc++.h>
using namespace std;
void scan(int &n) {
  int sign = 1;
  n = 0;
  char c = getchar_unlocked();
  while (c < '0' || c > '9') {
    if (c == '-') sign = -1;
    c = getchar_unlocked();
  }
  while (c >= '0' && c <= '9')
    n = (n << 3) + (n << 1) + c - '0', c = getchar_unlocked();
  n = n * sign;
}
void lscan(long long int &n) {
  int sign = 1;
  n = 0;
  char c = getchar_unlocked();
  while (c < '0' || c > '9') {
    if (c == '-') sign = -1;
    c = getchar_unlocked();
  }
  while (c >= '0' && c <= '9')
    n = (n << 3) + (n << 1) + c - '0', c = getchar_unlocked();
  n = n * (long long int)(sign);
}
int sscan(char a[]) {
  char c = getchar_unlocked();
  while (c == ' ' || c == '\n') c = getchar_unlocked();
  int i = 0;
  while (c != '\n') a[i++] = c, c = getchar_unlocked();
  a[i] = 0;
  return i;
}
int wscan(char a[]) {
  char c = getchar_unlocked();
  while (c == ' ' || c == '\n') c = getchar_unlocked();
  int i = 0;
  while (c != '\n' && c != ' ') a[i++] = c, c = getchar_unlocked();
  a[i] = 0;
  return i;
}
void print(int n) {
  if (n < 0) {
    n = -n;
    putchar_unlocked('-');
  }
  int i = 10;
  char o[10];
  do {
    o[--i] = (n % 10) + '0';
    n /= 10;
  } while (n);
  do {
    putchar_unlocked(o[i]);
  } while (++i < 10);
}
void lprint(long long int n) {
  if (n < 0LL) {
    n = -n;
    putchar_unlocked('-');
  }
  int i = 21;
  char o[21];
  do {
    o[--i] = (n % 10LL) + '0';
    n /= 10LL;
  } while (n);
  do {
    putchar_unlocked(o[i]);
  } while (++i < 21);
}
void sprint(const char a[]) {
  const char *p = a;
  while (*p) putchar_unlocked(*p++);
}
long long int po(long long int a, long long int b, long long int m) {
  long long int x = 1, y = a;
  while (b > 0) {
    if (b % 2 == 1) {
      x = (x * y);
      if (x > m) x %= m;
    }
    y = (y * y);
    if (y > m) y %= m;
    b /= 2;
  }
  return x;
}
const long long int MOD = 1000000007LL;
const int siz = 1000005;
int a[2005][2];
int main() {
  long long int ans = 0;
  int ar;
  int i, j, k, n;
  scan(n);
  for (i = 0; i < n; i++) {
    scan(a[i][0]);
    scan(a[i][1]);
  }
  for (i = 0; i < n; i++) {
    for (j = i + 1; j < n; j++) {
      for (k = j + 1; k < n; k++) {
        ar = a[i][0] * a[j][1] - a[i][1] * a[j][0] + a[j][0] * a[k][1] -
             a[j][1] * a[k][0] + a[k][0] * a[i][1] - a[k][1] * a[i][0];
        if (ar) ans++;
      }
    }
  }
  lprint(ans);
  putchar_unlocked('\n');
  return 0;
}

### Prompt

Create a solution in cpp for 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>
using namespace std;
void scan(int &n) {
  int sign = 1;
  n = 0;
  char c = getchar_unlocked();
  while (c < '0' || c > '9') {
    if (c == '-') sign = -1;
    c = getchar_unlocked();
  }
  while (c >= '0' && c <= '9')
    n = (n << 3) + (n << 1) + c - '0', c = getchar_unlocked();
  n = n * sign;
}
void lscan(long long int &n) {
  int sign = 1;
  n = 0;
  char c = getchar_unlocked();
  while (c < '0' || c > '9') {
    if (c == '-') sign = -1;
    c = getchar_unlocked();
  }
  while (c >= '0' && c <= '9')
    n = (n << 3) + (n << 1) + c - '0', c = getchar_unlocked();
  n = n * (long long int)(sign);
}
int sscan(char a[]) {
  char c = getchar_unlocked();
  while (c == ' ' || c == '\n') c = getchar_unlocked();
  int i = 0;
  while (c != '\n') a[i++] = c, c = getchar_unlocked();
  a[i] = 0;
  return i;
}
int wscan(char a[]) {
  char c = getchar_unlocked();
  while (c == ' ' || c == '\n') c = getchar_unlocked();
  int i = 0;
  while (c != '\n' && c != ' ') a[i++] = c, c = getchar_unlocked();
  a[i] = 0;
  return i;
}
void print(int n) {
  if (n < 0) {
    n = -n;
    putchar_unlocked('-');
  }
  int i = 10;
  char o[10];
  do {
    o[--i] = (n % 10) + '0';
    n /= 10;
  } while (n);
  do {
    putchar_unlocked(o[i]);
  } while (++i < 10);
}
void lprint(long long int n) {
  if (n < 0LL) {
    n = -n;
    putchar_unlocked('-');
  }
  int i = 21;
  char o[21];
  do {
    o[--i] = (n % 10LL) + '0';
    n /= 10LL;
  } while (n);
  do {
    putchar_unlocked(o[i]);
  } while (++i < 21);
}
void sprint(const char a[]) {
  const char *p = a;
  while (*p) putchar_unlocked(*p++);
}
long long int po(long long int a, long long int b, long long int m) {
  long long int x = 1, y = a;
  while (b > 0) {
    if (b % 2 == 1) {
      x = (x * y);
      if (x > m) x %= m;
    }
    y = (y * y);
    if (y > m) y %= m;
    b /= 2;
  }
  return x;
}
const long long int MOD = 1000000007LL;
const int siz = 1000005;
int a[2005][2];
int main() {
  long long int ans = 0;
  int ar;
  int i, j, k, n;
  scan(n);
  for (i = 0; i < n; i++) {
    scan(a[i][0]);
    scan(a[i][1]);
  }
  for (i = 0; i < n; i++) {
    for (j = i + 1; j < n; j++) {
      for (k = j + 1; k < n; k++) {
        ar = a[i][0] * a[j][1] - a[i][1] * a[j][0] + a[j][0] * a[k][1] -
             a[j][1] * a[k][0] + a[k][0] * a[i][1] - a[k][1] * a[i][0];
        if (ar) ans++;
      }
    }
  }
  lprint(ans);
  putchar_unlocked('\n');
  return 0;
}

```