#include <bits/stdc++.h>
using namespace std;
char ch;
bool f;
inline void read(int &a) {
  f = 1;
  for (ch = getchar(); ch > '9' || ch < '0'; ch = getchar())
    if (ch == '-') f = 0;
  for (a = 0; ch <= '9' && ch >= '0'; ch = getchar()) (a *= 10) += ch - '0';
  if (!f) a = -a;
}
int n, Threshold, maxx, maxy;
struct inf {
  int x, y, p;
} P[1000100];
inline bool Acmp(const inf &a, const inf &b) {
  return a.x / Threshold != b.x / Threshold ? a.x < b.x : a.y < b.y;
}
int main() {
  int i;
  read(n);
  for (i = 1; i <= n; i++) {
    read(P[i].x);
    read(P[i].y);
    P[i].p = i;
    maxx = max(P[i].x, maxx);
    maxy = max(P[i].y, maxy);
  }
  Threshold = ceil(sqrt((long double)maxx * maxy * 2 / n));
  sort(P + 1, P + n + 1, Acmp);
  for (i = 1; i <= n; i++) printf("%d\n", P[i].p);
}
