바느질 그래프
시간 제한2초메모리 제한1024 MB
앞면과 뒷면 각각에서 모든 점을 연결하고 같은 면의 변이 교차하지 않도록 하는 가장 짧은 앞뒤 교대 변 수열을 찾는다.
문제
동현이는 최근에 정사각형 모양의 식탁보를 샀다. 식탁보 위에는 개의 점이 있고, 이 점들은 식탁보의 양면에서 모두 보인다. 동현이는 식탁보를 더 아름답게 만들 수 있다고 생각해 바느질로 장식하기로 했다.
편의상 각 점은 평면 위의 점이고 점들은 부터 까지 번호가 매겨져 있다고 하자. 점 ()는 좌표 에 있다. 같은 좌표에 있는 두 점은 없다. 바느질 순서는 인 정수열 로서 ()이고 ()을 만족한다. 이 수열은 다음 규칙에 따라 식탁보 위에 선분을 그린다.
- 모든 에 대해 점 과 점 를 잇는 선분을 식탁보의 앞면에 그린다.
- 모든 에 대해 점 와 점 을 잇는 선분을 식탁보의 뒷면에 그린다.
동현이는 식탁보 위에 아름다운 무늬를 만들고 싶어 한다. 아름다운 무늬는 다음과 같이 정의된다.
- 식탁보의 양면 각각에서 개의 점이 모두 그 면의 선분으로 연결되어 있다.
- 같은 면에 있는 두 선분은 공통 끝점에서만 만날 수 있다.
동현이는 매우 바빠서 바느질을 최대한 빨리 끝내고 싶어 한다. 즉, 아름다운 무늬를 만드는 모든 바느질 순서 중에서 가장 짧은 것을 고르려고 한다. 여러분은 그런 순서를 찾아야 한다.
동현이가 최소화하려는 것은 그가 그리는 선분 길이의 합이 아니라 바느질 순서 자체의 길이이다.
입력
첫째 줄에 정수 이 주어진다. ()
다음 개 줄에 정수 와 가 주어지며, 이는 점 가 좌표 에 있다는 뜻이다. ()
같은 좌표에 있는 두 점은 없다.
출력
첫째 줄에 아름다운 무늬를 만드는 가장 짧은 바느질 순서의 길이인 양의 정수 를 출력한다.
다음 줄에 실제 바느질 순서 , , , 를 출력한다.
가능한 모든 입력에 대해 아름다운 무늬를 만드는 바느질 순서가 존재함을 증명할 수 있다.