브라우니 포인트 II
시간 제한1초메모리 제한128 MB
평면 위 점들에서 Stan은 수직선을, Ollie는 그 위의 점을 지나는 수평선을 고른다. Stan이 보장하는 점수와 그때 Ollie가 얻는 서로 다른 최선 점수를 구한다.
문제
Stan과 Ollie가 '홀수 브라우니 포인트' 게임을 한다. 평면 위 정수 좌표에 여러 개의 브라우니 포인트가 놓여 있다.
Stan이 먼저 수직선 하나를 긋는다. 이 수직선은 반드시 어떤 브라우니 포인트를 지나야 한다(즉 그 선의 좌표는 어떤 포인트의 좌표와 같아야 하며, 같은 좌표를 가진 여러 포인트를 동시에 지날 수도 있다). 이어서 Ollie가 수평선 하나를 긋는데, 이 수평선은 Stan의 수직선 위에 이미 놓여 있는 브라우니 포인트 중 하나를 반드시 지나야 한다.
두 직선은 평면을 네 개의 사분면으로 나눈다. 좌표가 양의 방향으로 얼마든지 커질 수 있는 사분면을 오른쪽 위 사분면이라 하자. 어떤 브라우니 포인트가 두 직선 중 하나 위에 정확히 놓이면 그 포인트는 지나간 것으로 간주되어 누구의 점수에도 포함되지 않는다.
- Stan은 오른쪽 위 또는 왼쪽 아래 사분면에 있는, 지나가지 않은 브라우니 포인트 하나마다 1점을 얻는다.
- Ollie는 왼쪽 위 또는 오른쪽 아래 사분면에 있는, 지나가지 않은 브라우니 포인트 하나마다 1점을 얻는다.
두 사람 모두 자신의 점수를 최대로 만들려고 한다. 먼저 두는 Stan은 Ollie의 대응을 미리 고려하여, 자신이 확실히 보장받을 수 있는 최소 점수가 가장 커지도록 수직선을 선택한다.
입력
입력은 여러 개의 테스트 케이스로 이루어진다. 각 테스트 케이스의 첫 줄에는 브라우니 포인트의 개수인 홀수 ()이 주어진다. 이어지는 개의 줄에는 각각 한 브라우니 포인트의 좌표를 나타내는 두 정수 , ()가 주어진다. 같은 위치에 놓인 두 포인트는 없다. 입력의 끝은 하나만 있는 줄로 표시된다.
출력
각 테스트 케이스마다 한 줄을 출력한다. 먼저 Stan이 스스로 보장할 수 있는 최대 점수를 출력한다. 그다음, 그 보장 점수를 달성하는 모든 수직선에 대해 Ollie가 최선으로 대응했을 때 얻을 수 있는 서로 다른 점수들을 오름차순으로 출력한다. 출력 형식은 정확히 다음과 같다.
Stan: S; Ollie: o1 o2 ... ok;