#include <bits/stdc++.h>
using namespace std;
int n;
vector<pair<int, int> > v;
bool cmp(pair<int, int> a, pair<int, int> b) {
  return make_pair(a.second, a.first) < make_pair(b.second, b.first);
}
map<long long int, vector<long long int> > mp;
vector<long long int> v2;
struct st {
  int bit[200005];
  void add(int i, int x) {
    i++;
    while (i < 200005) {
      bit[i] += x;
      i += i & -i;
    }
  }
  long long int sum(int i) {
    i++;
    long long int r = 0;
    while (i) {
      r += bit[i];
      i -= i & -i;
    }
    return r;
  }
  st() { memset(bit, 0, sizeof(bit)); }
  int rng(int l, int r) {
    int f = sum(r);
    if (l) f -= sum(l - 1);
    return f;
  }
};
st bit;
set<int> s;
int main() {
  cin >> n;
  for (int i = 0; i < n; i++) {
    int a, b;
    scanf("%d%d", &a, &b);
    mp[-b].push_back(a);
    v2.push_back(a);
  }
  sort(v2.begin(), v2.end());
  v2.erase(unique(v2.begin(), v2.end()), v2.end());
  long long int ans = 0;
  for (auto &it : mp) {
    vector<long long int> &co = it.second;
    sort(co.begin(), co.end());
    for (auto &el : co) {
      el = lower_bound(v2.begin(), v2.end(), el) - v2.begin();
      if (s.count(el) == 0) {
        s.insert(el);
        bit.add(el, 1);
      }
    }
    long long int cur = 0;
    for (int i = 0; i < co.size(); i++) {
      long long int tmp = bit.rng(0, co[i]);
      long long int f = tmp - cur;
      cur = tmp;
      long long int s = bit.rng(co[i], v2.size() - 1);
      ans += f * s;
    }
  }
  printf("%lld\n", ans);
  return 0;
}
