#include <bits/stdc++.h>
using namespace std;
const double PI = acos(-1.0);
const double eps = 1e-10;
int dcmp(double x) {
  if (fabs(x) < eps)
    return 0;
  else
    return x < 0 ? -1 : 1;
}
const int INF = 0x3f3f3f3f;
const int N = 1e6 + 5;
struct node {
  int x, y, id;
  bool operator<(const node& u) const {
    return x < u.x || (x == u.x && y < u.y) ||
           (x == u.x && y == u.y && id < u.id);
  }
};
vector<node> G[1000 * 1000 + 2000];
int main() {
  int n, m, x, y;
  scanf("%d", &n);
  m = 1001;
  for (int i = 0; i < n; i++) {
    scanf("%d%d", &x, &y);
    int xx = x / 1000, yy = y / 1000;
    G[yy * m + xx].push_back({x, y, i});
  }
  for (int i = 0; i <= 1000; i++) {
    if (i % 2 == 0) {
      for (int j = 0; j <= 1000; j++) {
        sort(G[i * m + j].begin(), G[i * m + j].end());
        for (node u : G[i * m + j]) {
          printf("%d ", u.id + 1);
        }
      }
    } else {
      for (int j = 1000; j >= 0; j--) {
        sort(G[i * m + j].begin(), G[i * m + j].end());
        for (int k = G[i * m + j].size() - 1; k >= 0; k--) {
          printf("%d ", G[i * m + j][k].id + 1);
        }
      }
    }
  }
  return 0;
}
