#include <bits/stdc++.h>
using namespace std;
int n;
struct pt {
  long long x, y, xc;
};
pt ar[200000];
int fw[200001];
int xoc[200001];
inline void fa(int v) {
  if (xoc[v]) return;
  xoc[v] = 1;
  while (v <= 200000) {
    fw[v]++;
    v += (v & -v);
  }
}
inline long long sa(int id) {
  long long tt = 0;
  while (id > 0) {
    tt += (long long)fw[id];
    id -= (id & -id);
  }
  return tt;
}
inline long long rs(int b, int e) { return sa(e) - sa(b - 1); }
int main(int argc, char **argv) {
  scanf("%d ", &n);
  for (int i = 0; i < n; i++) scanf("%lld %lld\n", &ar[i].x, &ar[i].y);
  auto f1 = [&](pt &a, pt &b) { return a.y == b.y ? a.xc < b.xc : a.y > b.y; };
  auto f2 = [&](pt &a, pt &b) { return a.x < b.x; };
  sort(ar, ar + n, f2);
  for (int i = 0; i < n; i++) {
    if (i >= 1)
      if (ar[i].x == ar[i - 1].x)
        ar[i].xc = ar[i - 1].xc;
      else
        ar[i].xc = ar[i - 1].xc + 1;
    else
      ar[i].xc = 1;
  }
  sort(ar, ar + n, f1);
  long long tt = 0;
  for (int i = 0, j = 0; i < n; i++) {
    if (i == 0)
      fa(ar[i].xc);
    else {
      if (ar[i].y == ar[i - 1].y) {
        fa(ar[i].xc);
      } else {
        for (int k = j; k < i; k++) {
          if (k == j) {
            tt += rs(1, ar[k].xc) * rs(ar[k].xc, n);
          } else {
            tt += rs(ar[k - 1].xc + 1, ar[k].xc) * rs(ar[k].xc, n);
          }
        }
        fa(ar[i].xc);
        j = i;
      }
    }
    if (i == n - 1) {
      for (int k = j; k <= i; k++) {
        if (k == j) {
          tt += rs(1, ar[k].xc) * rs(ar[k].xc, n);
        } else {
          tt += rs(ar[k - 1].xc + 1, ar[k].xc) * rs(ar[k].xc, n);
        }
      }
    }
  }
  printf("%lld\n", tt);
  return 0;
}
