구를 물려받다
시간 제한1초메모리 제한128 MB
구들을 통과하는 수평면을 위로 이동시키면서 원판들의 연결 요소 수가 증가하거나 감소하는 순간들을 이벤트 기반으로 정확히 계산해 0과 1의 수열로 출력하는 문제입니다.
문제
2xxx년, 한 행성에 착륙한 탐사대가 그 행성에 살았던 고대 종족이 만든 기이한 물체들을 발견했다. 각 물체는 불투명한 고체 구들을 담고 있는 투명한 상자이며, 구들의 위치와 반지름을 기록한 것으로 보이는 석판도 여럿 함께 발견되었다.
처음에는 이 물체들의 용도를 알 수 없었으나, 잠벤도르프 교수는 수평면으로 자른 단면이 중요한 역할을 한다는 것을 알아냈다. 수평면을 물체의 아래에서 위로 밀어 올리면 단면이 변한다.
각 단면은 여러 개의 원판으로 이루어지며, 각 원판은 고체 구 하나의 단면이다. 서로 만나거나 닿는 원판들은 하나의 연결 도형으로 합쳐진다. 교수는 수평면이 올라감에 따라 연결 도형의 개수가 어떻게 변하는지에 정보가 담겨 있음을 발견했다.
예를 들어 아래 첫 번째 예제 데이터가 나타내는 물체에서는, 연결 도형의 개수가 에서 각각 으로 변한다. 증가를 , 감소를 으로 나타내면 이 변화의 나열은 비트 이진수 으로 표현된다.
수평면을 맨 아래()에서 맨 위()까지 밀어 올릴 때의 이러한 변화를 구하는 프로그램을 작성하라.
입력
입력은 여러 개의 데이터셋으로 이루어진다. 각 데이터셋은 구의 개수를 나타내는 양의 정수 이 적힌 줄로 시작한다. 이어서 개의 줄에 각 구가 설명되며, 각 줄에는 네 개의 양의 정수 ()가 있어 번째 구의 중심 와 반지름 를 나타낸다.
, , , , 이라고 가정해도 좋다. 번째 고체 구는 를 만족하는 모든 점 의 집합이다.
한 구가 다른 구를 포함할 수 있다. 어떤 두 구도 서로 접하지 않는다. 모든 값과, 임의의 두 구가 교차하여 생기는 원의 최소 및 최대 좌표는 서로 적어도 만큼 차이가 난다.
입력의 끝은 하나만 있는 줄로 표시된다.
출력
각 데이터셋에 대해 두 줄을 출력한다. 첫 줄에는 연결 도형 개수의 변화 횟수를 나타내는 정수 을 출력한다. 둘째 줄에는 그 변화들을 나타낸 비트 이진수를 출력한다. 즉 가 커지는 순서대로, 증가에는 , 감소에는 을 쓴다.