구를 물려받다

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

문제

2xxx년, 한 행성에 착륙한 탐사대가 그 행성에 살았던 고대 종족이 만든 기이한 물체들을 발견했다. 각 물체는 불투명한 고체 구들을 담고 있는 투명한 상자이며, 구들의 위치와 반지름을 기록한 것으로 보이는 석판도 여럿 함께 발견되었다.

처음에는 이 물체들의 용도를 알 수 없었으나, 잠벤도르프 교수는 수평면으로 자른 단면이 중요한 역할을 한다는 것을 알아냈다. 수평면을 물체의 아래에서 위로 밀어 올리면 단면이 변한다.

각 단면은 여러 개의 원판으로 이루어지며, 각 원판은 고체 구 하나의 단면이다. 서로 만나거나 닿는 원판들은 하나의 연결 도형으로 합쳐진다. 교수는 수평면이 올라감에 따라 연결 도형의 개수가 어떻게 변하는지에 정보가 담겨 있음을 발견했다.

예를 들어 아래 첫 번째 예제 데이터가 나타내는 물체에서는, 연결 도형의 개수가 $z = 0.0000, 162.0000, 167.0000, 173.0004, 185.0000, 191.9996, 198.0000, 203.0000, 205.0000$에서 각각 $0, 1, 2, 1, 2, 3, 2, 1, 0$으로 변한다. 증가를 $1$, 감소를 $0$으로 나타내면 이 변화의 나열은 $8$비트 이진수 $11011000$으로 표현된다.

수평면을 맨 아래($z = 0$)에서 맨 위($z = 36000$)까지 밀어 올릴 때의 이러한 변화를 구하는 프로그램을 작성하라.

입력

입력은 여러 개의 데이터셋으로 이루어진다. 각 데이터셋은 구의 개수를 나타내는 양의 정수 $N$이 적힌 줄로 시작한다. 이어서 $N$개의 줄에 각 구가 설명되며, 각 줄에는 네 개의 양의 정수 $X_i, Y_i, Z_i, R_i$ ($i = 1, \dots, N$)가 있어 $i$번째 구의 중심 $(X_i, Y_i, Z_i)$와 반지름 $R_i$를 나타낸다.

$1 \le N \le 100$, $1 \le R_i \le 2000$, $0 < X_i - R_i < X_i + R_i < 4000$, $0 < Y_i - R_i < Y_i + R_i < 16000$, $0 < Z_i - R_i < Z_i + R_i < 36000$이라고 가정해도 좋다. $i$번째 고체 구는 $(x - X_i)^2 + (y - Y_i)^2 + (z - Z_i)^2 \le R_i^2$를 만족하는 모든 점 $(x, y, z)$의 집합이다.

한 구가 다른 구를 포함할 수 있다. 어떤 두 구도 서로 접하지 않는다. 모든 $Z_i \pm R_i$ 값과, 임의의 두 구가 교차하여 생기는 원의 최소 및 최대 $z$좌표는 서로 적어도 $0.01$만큼 차이가 난다.

입력의 끝은 $0$ 하나만 있는 줄로 표시된다.

출력

각 데이터셋에 대해 두 줄을 출력한다. 첫 줄에는 연결 도형 개수의 변화 횟수를 나타내는 정수 $M$을 출력한다. 둘째 줄에는 그 변화들을 나타낸 $M$비트 이진수를 출력한다. 즉 $z$가 커지는 순서대로, 증가에는 $1$, 감소에는 $0$을 쓴다.