아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

바느질 그래프

시간 제한2초메모리 제한1024 MB

요약
앞면과 뒷면 각각에서 모든 점을 연결하고 같은 면의 변이 교차하지 않도록 하는 가장 짧은 앞뒤 교대 변 수열을 찾는다.
난이도

어려움10점 중 9점

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

문제

동현이는 최근에 정사각형 모양의 식탁보를 샀다. 식탁보 위에는 NN개의 점이 있고, 이 점들은 식탁보의 양면에서 모두 보인다. 동현이는 식탁보를 더 아름답게 만들 수 있다고 생각해 바느질로 장식하기로 했다.

편의상 각 점은 xyxy평면 위의 점이고 점들은 11부터 NN까지 번호가 매겨져 있다고 하자. 점 ii (1≤i≤N1 \le i \le N)는 좌표 (x_i,y_i)(x\_i, y\_i)에 있다. 같은 좌표에 있는 두 점은 없다. 바느질 순서는 k≥2k \geq 2인 정수열 {s_i}\{ s\_i \}로서 1≤s_i≤N1 \le s\_i \le N (1≤i≤k1 \le i \le k)이고 s_i≠s_i+1s\_i \neq s\_{i+1} (1≤i≤k−11 \le i \le k-1)을 만족한다. 이 수열은 다음 규칙에 따라 식탁보 위에 선분을 그린다.

  • 모든 1≤i≤⌊k2⌋1 \le i \le \left \lfloor \frac{k}{2} \right \rfloor에 대해 점 s_2i−1s\_{2i-1}과 점 s_2is\_{2i}를 잇는 선분을 식탁보의 앞면에 그린다.
  • 모든 1≤j≤⌊k−12⌋1 \le j \le \left \lfloor \frac{k-1}{2} \right\rfloor에 대해 점 s_2js\_{2j}와 점 s_2j+1s\_{2j+1}을 잇는 선분을 식탁보의 뒷면에 그린다.

동현이는 식탁보 위에 아름다운 무늬를 만들고 싶어 한다. 아름다운 무늬는 다음과 같이 정의된다.

  • 식탁보의 양면 각각에서 NN개의 점이 모두 그 면의 선분으로 연결되어 있다.
  • 같은 면에 있는 두 선분은 공통 끝점에서만 만날 수 있다.

동현이는 매우 바빠서 바느질을 최대한 빨리 끝내고 싶어 한다. 즉, 아름다운 무늬를 만드는 모든 바느질 순서 중에서 가장 짧은 것을 고르려고 한다. 여러분은 그런 순서를 찾아야 한다.

동현이가 최소화하려는 것은 그가 그리는 선분 길이의 합이 아니라 바느질 순서 자체의 길이이다.

입력

첫째 줄에 정수 NN이 주어진다. (2≤N≤1 0002 \le N \le 1\,000)

다음 NN개 줄에 정수 x_ix\_i와 y_iy\_i가 주어지며, 이는 점 ii가 좌표 (x_i,y_i)(x\_i, y\_i)에 있다는 뜻이다. (1≤x_i,y_i≤1091 \le x\_i, y\_i \le 10^9)

같은 좌표에 있는 두 점은 없다.

출력

첫째 줄에 아름다운 무늬를 만드는 가장 짧은 바느질 순서의 길이인 양의 정수 kk를 출력한다.

다음 줄에 실제 바느질 순서 s_1s\_1, s_2s\_2, ⋯\cdots, s_ks\_k를 출력한다.

가능한 모든 입력에 대해 아름다운 무늬를 만드는 바느질 순서가 존재함을 증명할 수 있다.

예제1

  1. 예제 1

    입력
    5
    1 1
    2 4
    3 2
    4 5
    5 3
    
    예상 출력
    9
    1 2 4 3 2 3 5 3 1