#include <bits/stdc++.h>
using namespace std;
long long n;
set<long long> s;
long long a[100005];
long long b[100005];
map<long long, map<long long, long long> > k;
bool mark[100005];
long long x, y;
vector<long long> q;
long long mod = 1e9 + 9;
int pp(long long g, long long h) {
  if (k[g][h + 1] != 0 && k[g - 1][h] == 0 && k[g + 1][h] == 0) {
    return 0;
  }
  if (k[g + 1][h + 1] != 0 && k[g + 2][h] == 0 && k[g + 1][h] == 0) {
    return 0;
  }
  if (k[g - 1][h + 1] != 0 && k[g - 1][h] == 0 && k[g - 2][h] == 0) {
    return 0;
  }
  s.insert(k[g][h] - 1);
  return 0;
}
int main() {
  ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> a[i] >> b[i];
    a[i] = a[i] + 1111111111;
    k[a[i]][b[i]] = i + 1;
  }
  for (int i = 0; i < n; i++) {
    if (k[a[i]][b[i] + 1] != 0 && k[a[i] - 1][b[i]] == 0 &&
        k[a[i] + 1][b[i]] == 0) {
      continue;
    }
    if (k[a[i] + 1][b[i] + 1] != 0 && k[a[i] + 2][b[i]] == 0 &&
        k[a[i] + 1][b[i]] == 0) {
      continue;
    }
    if (k[a[i] - 1][b[i] + 1] != 0 && k[a[i] - 1][b[i]] == 0 &&
        k[a[i] - 2][b[i]] == 0) {
      continue;
    }
    s.insert(i);
  }
  auto r = s.begin();
  int u = 0;
  while (s.size() != 0) {
    r = s.end();
    r--;
    if (u % 2 == 0) {
      r = s.end();
      r--;
      q.push_back(*r);
      k[a[*r]][b[*r]] = 0;
      if (k[a[*r]][b[*r] - 1] != 0) {
        pp(a[*r], b[*r] - 1);
      }
      if (k[a[*r] + 1][b[*r] - 1] != 0) {
        pp(a[*r] + 1, b[*r] - 1);
      }
      if (k[a[*r] - 1][b[*r] - 1] != 0) {
        pp(a[*r] - 1, b[*r] - 1);
      }
      if (k[a[*r] + 2][b[*r]] != 0) {
        s.erase(k[a[*r] + 2][b[*r]] - 1);
        pp(a[*r] + 2, b[*r]);
      }
      if (k[a[*r] + 1][b[*r]] != 0) {
        s.erase(k[a[*r] + 1][b[*r]] - 1);
        pp(a[*r] + 1, b[*r]);
      }
      if (k[a[*r] - 1][b[*r]] != 0) {
        s.erase(k[a[*r] - 1][b[*r]] - 1);
        pp(a[*r] - 1, b[*r]);
      }
      if (k[a[*r] - 2][b[*r]] != 0) {
        s.erase(k[a[*r] - 2][b[*r]] - 1);
        pp(a[*r] - 2, b[*r]);
      }
    } else {
      r = s.begin();
      q.push_back(*r);
      k[a[*r]][b[*r]] = 0;
      if (k[a[*r]][b[*r] - 1] != 0) {
        pp(a[*r], b[*r] - 1);
      }
      if (k[a[*r] + 1][b[*r] - 1] != 0) {
        pp(a[*r] + 1, b[*r] - 1);
      }
      if (k[a[*r] - 1][b[*r] - 1] != 0) {
        pp(a[*r] - 1, b[*r] - 1);
      }
      if (k[a[*r] + 2][b[*r]] != 0) {
        s.erase(k[a[*r] + 2][b[*r]] - 1);
        pp(a[*r] + 2, b[*r]);
      }
      if (k[a[*r] + 1][b[*r]] != 0) {
        s.erase(k[a[*r] + 1][b[*r]] - 1);
        pp(a[*r] + 1, b[*r]);
      }
      if (k[a[*r] - 1][b[*r]] != 0) {
        s.erase(k[a[*r] - 1][b[*r]] - 1);
        pp(a[*r] - 1, b[*r]);
      }
      if (k[a[*r] - 2][b[*r]] != 0) {
        s.erase(k[a[*r] - 2][b[*r]] - 1);
        pp(a[*r] - 2, b[*r]);
      }
    }
    s.erase(*r);
    u++;
  }
  long long ans = 0;
  reverse(q.begin(), q.end());
  long long c = 1;
  for (int i = 0; i < n; i++) {
    ans += c * q[i];
    ans %= mod;
    c *= n;
    c %= mod;
  }
  cout << ans % mod << endl;
}
