#include <bits/stdc++.h>
using namespace std;
long long gcd(long long a, long long b) { return b == 0 ? a : gcd(b, a % b); }
const int MAXN = 100;
typedef struct R {
  int a, d, id;
} R;
bool operator<(const R &p, const R &q) {
  int pp = p.d < 0   ? -1
           : p.d > 0 ? +1
                     : 0,
      qq = q.d < 0   ? -1
           : q.d > 0 ? +1
                     : 0;
  if (pp != qq) return pp < qq;
  if (pp == -1) {
    if (p.a != q.a) return p.a > q.a;
    return p.id < q.id;
  }
  if (pp == +1) {
    if (p.a != q.a) return p.a < q.a;
    return p.id > q.id;
  }
  return false;
}
int n;
R r[MAXN];
int calc(R &p, R &q) {
  if (p.a != q.a) return p.a > q.a ? -1 : +1;
  if (p.id != q.id) return p.id < q.id ? -1 : +1;
  return 0;
}
bool change(R &p, R &q) {
  int x = calc(p, q);
  p.a += p.d;
  int y = calc(p, q);
  p.a -= p.d;
  return x != y;
}
void run() {
  scanf("%d", &n);
  for (int i = (0); i < (n); ++i) scanf("%d%d", &r[i].a, &r[i].d), r[i].id = i;
  sort(r, r + n);
  int ret = 0;
  for (int i = (0); i < (n); ++i)
    for (int j = (i + 1); j < (n); ++j) {
      if (change(r[i], r[j])) ++ret;
      r[i].a += r[i].d;
      if (change(r[j], r[i])) ++ret;
      r[i].a -= r[i].d;
    }
  printf("%d\n", ret);
}
int main() {
  run();
  return 0;
}
