#include <bits/stdc++.h>
using namespace std;
const int maxn = 1005000;
struct point {
  int id, x, y;
  bool operator<(point a) const { return y < a.y; }
};
vector<point> b[1010];
int main() {
  int n;
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    point t;
    scanf("%d %d", &t.x, &t.y);
    t.id = i;
    b[t.x / 1000].push_back(t);
  }
  bool flag = 0;
  for (int i = 0; i <= 1000; i++) {
    sort(b[i].begin(), b[i].end());
    if (b[i].size()) {
      int len = b[i].size();
      if (!flag) {
        for (int j = 0; j < len; j++) {
          printf("%d ", b[i][j].id);
        }
      } else {
        for (int j = len - 1; j >= 0; j--) {
          printf("%d ", b[i][j].id);
        }
      }
      flag = flag ^ 1;
    }
  }
  return 0;
}
