#include <bits/stdc++.h>
using namespace std;
#define rep(i, n) for (int i = 0; i < (n); i++)
#define e(v) sort(v.begin(), v.end())
#define rev(v) reverse(v.begin(), v.end())
#define out(s) cout << s << endl
typedef long long ll;
using Graph = vector<vector<int>>;
const int MOD = 1000000007;

int main(){
  int n;
  cin >> n;
  vector<int> x(n), y(n);
  rep(i,n){
    cin >> x.at(i) >> y.at(i);
  }
  int num = 0;
  for (int i = 0; i < n - 1;i++){
    for (int j = i + 1; j < n;j++){
      float t = (float)(y.at(j) - y.at(i)) / (float)(x.at(j) - x.at(i));
      if (t >= -1 && t <= 1)
      {
        num++;
      }
    }
  }
  out(num);
}
#include <bits/stdc++.h>
using namespace std;
struct node {
	int x, y;
} a[1010];
int n, ans;

int main() {
	scanf("%d", &n);
	for (int i = 1; i <= n; i++) scanf("%d%d", &a[i].x, &a[i].y);
	for (int i = 1; i <= n; i++) 
		for (int j = i + 1; j <= n; j++)
			if (i != j && a[i].x != a[j].x)
				if ((double)(a[i].y - a[j].y) / (double)(a[i].x - a[j].x) <= 1.0 && (double)(a[i].y - a[j].y) / (double)(a[i].x - a[j].x) >= -1.0)
					ans++;
	printf("%d\n", ans);
	return 0;
}