단순 다각형

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

문제

평면 위에 놓인 점들의 집합이 주어진다. 이 점들을 꼭짓점으로 하는 다각형을 만드는 프로그램을 작성하시오. 집합의 모든 점은 반드시 다각형의 꼭짓점이 되어야 하며, 집합에 없는 점을 꼭짓점으로 사용할 수 없다. 또한 다각형의 서로 다른 두 변은 이웃한 두 변이 공유하는 꼭짓점을 제외하고는 서로 만나거나 교차하지 않아야 한다. 즉, 단순 다각형이어야 한다.

입력으로 주어지는 점들은 항상 이러한 단순 다각형을 만들 수 있는 집합이다. 같은 위치에 있는 두 점은 없고, 모든 점이 한 직선 위에 있는 경우도 없다.

입력

첫째 줄에 테스트 케이스의 개수 $c$ ($1 \le c \le 200$)가 주어진다. 각 테스트 케이스는 한 줄로 이루어진다. 그 줄의 첫 번째 정수는 점의 개수 $n$ ($3 \le n \le 2000$)이고, 이어서 각 점의 좌표 $x$와 $y$가 차례대로 주어진다. 모든 좌표는 $-10000$ 이상 $10000$ 이하의 정수이다. 점에는 입력에 주어진 순서대로 $0$부터 $n-1$까지 번호를 매긴다.

출력

각 테스트 케이스마다 $0$부터 $n-1$까지의 정수를 한 번씩 사용한 순열을 공백으로 구분하여 한 줄에 출력한다. 이 순열은 점들을 잇는 순서를 나타내며, 그 순서대로 점을 이으면 단순 다각형이 되어야 한다.

가능한 단순 다각형은 여러 가지일 수 있으므로, 채점을 위해 다음 규칙으로 유일하게 정해지는 순서를 출력한다.

  1. 기준점을 고른다: $y$좌표가 가장 작은 점, 그런 점이 여럿이면 그중 $x$좌표가 가장 작은 점을 기준점으로 한다.
  2. 기준점을 제외한 나머지 점들을, 기준점에서 그 점으로 향하는 벡터의 방향각을 기준으로 반시계 방향(각이 커지는 순서)으로 정렬한다.
  3. 방향각이 같은 점들(기준점과 한 직선 위에 있는 점들)은 기준점까지의 거리가 가까운 것부터 나열한다. 단, 방향각이 가장 큰 점들의 묶음만은 거리가 먼 것부터 나열한다.
  4. 기준점의 번호를 가장 먼저 출력하고, 이어서 위 순서로 정해진 나머지 점들의 번호를 출력한다.

이 규칙으로 얻은 순서는 항상 단순 다각형을 이룬다.