#include <bits/stdc++.h>
using namespace std;

int main(){
  int n;
  cin >> n;
  vector<int> xn(n), yn(n);
  for(int i=0; i<n; ++i) cin >> xn[i] >> yn[i];
  int ans = 0;
  for(int i=0; i<n-1; ++i) for(int j=i+1; j<n; ++j){
    int dx = xn[j] - xn[i];
    int dy = yn[j] - yn[i];
    if(abs(dx) >= abs(dy)) ++ans;
  }
  cout << ans << endl;
}
// C++(GCC 9.2.1)
#include <bits/stdc++.h>
using namespace std;
#define repex(i, a, b, c) for(int i = a; i < b; i += c)
#define repx(i, a, b) repex(i, a, b, 1)
#define rep(i, n) repx(i, 0, n)
#define repr(i, a, b) for(int i = a; i >= b; i--)
int x[1010], y[1010];

int main(){
    
    // 1. 入力情報.
    int N;
    scanf("%d", &N);
    rep(i, N) scanf("%d %d", &x[i], &y[i]);
    
    // 2. 傾きが, -1 以上 かつ 1 以下 である(i, j) の 個数は？
    int ans = 0;
    rep(i, N){
        repx(j, i + 1, N){
            // 点 (x[i], y[i]) と (x[j], y[j]) を 通る直線の傾きは？
            // -> a = (y[i] - y[j]) / (x[i] - x[j]) が -1 以上 かつ 1 以下.
            if(abs(y[i] - y[j]) <= abs(x[i] - x[j])) ans++;
        }
    }
    
    // 3. 出力.
    printf("%d\n", ans);
    return 0;
    
}