#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1000000;
int n;
vector<int> fields[1003][1003];
pair<pair<int, int>, int> tab[MAXN + 3];
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    scanf("%d %d", &tab[i].first.first, &tab[i].first.second);
    tab[i].second = i;
  }
  sort(tab, tab + n);
  for (int i = 0; i < n; i++) {
    int x = tab[i].first.first / 1000;
    int y = tab[i].first.second / 1000;
    fields[x][y].push_back(tab[i].second);
  }
  for (int i = 0; i <= 1000; i++) {
    if (i % 2 == 0) {
      for (int j = 0; j <= 1000; j++) {
        for (int k = 0; k < (int)fields[i][j].size(); k++)
          printf("%d ", fields[i][j][k] + 1);
      }
    } else {
      for (int j = 1000; j >= 0; j--) {
        for (int k = 0; k < (int)fields[i][j].size(); k++)
          printf("%d ", fields[i][j][k] + 1);
      }
    }
  }
  puts("");
  return 0;
}
