만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

곡예비행 2

시간 제한1초메모리 제한512 MB

요약
N개의 체크포인트를 방문하는 순서를 정해, 중간 지점에서 경로가 꺾이는 각의 최솟값을 최대로 만드는 문제입니다.
난이도

보통10점 중 7점

유형
기하, 그리디
정답자
아직 제출이 없습니다

문제

비타로는 곡예비행 대회에 나가 비행기를 조종한다. 비행기는 일정한 고도를 유지하며 좌표평면 위의 체크포인트들을 지난다. 체크포인트는 NN개이며 1번부터 NN번까지 번호가 붙어 있다. 체크포인트 ii (1≤i≤N1 \le i \le N)의 좌표는 (Xi,YiX_i, Y_i)이다.

비행은 다음 순서로 진행한다. 모든 체크포인트를 정확히 한 번씩 지나야 한다.

  1. 비타로가 시작 체크포인트를 고른다. 비행기는 그 지점에서 출발한다.
  2. 다음 과정을 N−1N-1번 반복한다. 아직 고르지 않은 체크포인트 가운데 다음 체크포인트를 고른다. 비행기는 현재 체크포인트에서 다음 체크포인트까지 직선으로 날아간다.
  3. 비행기가 마지막 체크포인트에 도착하면 비행이 끝난다.

2번 과정에서 시작 체크포인트는 이미 고른 것으로 본다. 비행기는 한 체크포인트에서 다음 체크포인트까지 직선으로 날아야 한다. 곡선을 그리거나 비행 도중에 방향을 바꾸는 것은 금지된다.

비행 경로는 꺾은선이다. 비행기는 최대 N−2N-2번 방향을 바꾼다. 경로가 어떤 체크포인트에서 이루는 각이 작으면 그 지점의 방향 변화가 커져 비행에 실패할 위험이 있다.

그래서 비타로는 시작 체크포인트와 마지막 체크포인트를 제외한 N−2N-2개 체크포인트에서 경로가 이루는 최소 각을 최대한 크게 만들고자 한다. 좌표가 주어질 때, 경로의 최소 각이 가장 커지는 체크포인트 방문 순서를 구하시오.

입력

첫째 줄에 NN과 Z0Z_0가 주어진다.

NZ0N Z_0

X1Y1X_1 Y_1

⋮\vdots

XNYNX_N Y_N

이어지는 NN개의 줄에는 각 체크포인트의 좌표 XiX_i와 YiY_i가 공백으로 구분되어 주어진다. Z0Z_0는 채점 프로그램이 사용하는 매개변수이다.

출력

NN줄에 걸쳐 출력한다. kk번째 줄에는 경로에서 kk번째로 지나는 체크포인트의 번호 PkP_k (1≤Pk≤N1 \le P_k \le N)를 출력한다. 시작 체크포인트는 P1P_1이다.

제한

  • 3≤N≤1 0003 \le N \le 1\,000.
  • Xi2+Yi2≤10 000 000\sqrt{X_i^2 + Y_i^2} \le 10\,000\,000 (1≤i≤N1 \le i \le N).
  • (Xi,Yi)≠(Xj,Yj)(X_i, Y_i) \ne (X_j, Y_j) (1≤i<j≤N1 \le i < j \le N).
  • 1≤Z0≤1791 \le Z_0 \le 179.

예제1

  1. 예제 1

    입력
    7 90
    3 1
    2 5
    0 2
    -1 6
    -3 1
    -1 -4
    4 -2
    
    예상 출력
    5
    3
    1
    7
    6
    4
    2