#include <bits/stdc++.h>
using namespace std;
template <typename T, typename U>
inline void amin(T &x, U y) {
  if (y < x) x = y;
}
template <typename T, typename U>
inline void amax(T &x, U y) {
  if (x < y) x = y;
}
vector<int> sqrtSort(const vector<pair<int, int> > &q, const int S) {
  int n = q.size();
  vector<long long> pack(n);
  for (int i = 0; i < n; i++) {
    pack[i] =
        (long long)(q[i].first / S) << 50 |
        (long long)((q[i].first / S & 1) == 0 ? q[i].second
                                              : (1 << 25) - 1 - q[i].second)
            << 25 |
        i;
  }
  sort((pack).begin(), (pack).end());
  vector<int> res(n);
  for (int i = 0; i < n; i++) res[i] = pack[i] & ((1 << 25) - 1);
  return res;
}
int main() {
  int n;
  while (~scanf("%d", &n)) {
    vector<pair<int, int> > p(n);
    for (int(i) = 0; (i) < (int)(n); ++(i))
      scanf("%d%d", &p[i].first, &p[i].second);
    vector<int> ord = sqrtSort(p, 1000);
    for (int(i) = 0; (i) < (int)(n); ++(i)) {
      if (i != 0) putchar(' ');
      printf("%d", ord[i] + 1);
    }
    puts("");
  }
  return 0;
}
