CF BUDDY
← Problems·

576C · Points on Plane

2100 · constructive algorithms, divide and conquer, geometry

Problem: On a plane are n points (xi, yi) with integer coordinates between 0 and 106. The distance between the two points with numbers a and b is said to be the following value: dist(a,b)=xaxb+yayb\operatorname{dist}(a,b)=|x_{a}-x_{b}|+|y_{a}-y_{b}| (the distance calculated by such formula is called Manhattan distance).

We call a hamiltonian path to be some permutation pi of numbers from 1 to n. We say that the length of this path is value i=1n1dist(pi,pi+1)\sum_{i=1}^{n-1} \text{dist}(p_i, p_{i+1}).

Find some hamiltonian path with a length of no more than 25 × 108. Note that you do not have to minimize the path length.

Input Format: The first line contains integer n (1 ≤ n ≤ 106).

The i + 1-th line contains the coordinates of the i-th point: xi and yi (0 ≤ xi, yi ≤ 106).

It is guaranteed that no two points coincide.

Output Format: Print the permutation of numbers pi from 1 to n — the sought Hamiltonian path. The permutation must meet the inequality i=1n1dist(pi,pi+1)25×108{ \sum _ { i = 1 } ^ { n - 1 } \operatorname { d i s t } ( p _ { i }, p _ { i + 1 } ) } \leq 2 5 \times 1 0 ^ { 8 }.

If there are multiple possible answers, print any of them.

It is guaranteed that the answer exists.

Note: In the sample test the total distance is:

dist(4,3)+dist(3,1)+dist(1,2)+dist(2,5)=\text{dist}(4,3)+\text{dist}(3,1)+\text{dist}(1,2)+\text{dist}(2,5)=

(|5 - 3| + |0 - 4|) + (|3 - 0| + |4 - 7|) + (|0 - 8| + |7 - 10|) + (|8 - 9| + |10 - 12|) = 2 + 4 + 3 + 3 + 8 + 3 + 1 + 2 = 26

Sample Cases

Case 1

Input

5
0 7
8 10
3 4
5 0
9 12

Output

4 3 1 2 5

Similar problems

00:00:00
Loading editor…
Welcome! I'm your coding tutor for this problem. Use the chips below to reveal stored hints or get AI feedback on your code. I'll guide you step by step — never giving away the solution.

Sign in to unlock AI tutor feedback