바닥 위의 숫자
시간 제한2초메모리 제한128 MB
평면 위 막대들의 연결 관계와 직각의 부호를 이용해 그래프를 구성하고, 더 큰 모양에 포함된 부분 도형은 무시하면서 세그먼트 숫자 모양 0부터 9까지 각각 몇 번 나타나는지 세는 문제입니다.
문제
타로는 바닥에 곧은 막대를 놓아 하나코에게 숫자를 전달한다. 각 숫자는 7세그먼트 표시기 모양으로 그려진, 정해진 열 가지 형태 중 하나로 만든다.
타로가 항상 딱 맞는 길이의 막대를 가지고 있는 것은 아니어서, 형태를 언제나 완벽하게 놓을 수 있는 것은 아니다. 다행히 하나코는 막대들 사이의 연결 관계만 유지되면 그 형태를 숫자로 인식한다. 막대의 길이나 형태 전체의 방향은 상관없고, 오직 막대들이 어떻게 연결되어 있는지만이 중요하다. 그래서 늘어나거나 회전된 형태도 숫자로 읽을 수 있지만, 어떤 숫자와도 연결 관계가 일치하지 않는 형태는 인식하지 못한다.
한 막대가 다른 막대에 닿을 때, 닿는 점은 적어도 한쪽 막대의 끝점이며, 두 막대는 정확히 한 점에서만 겹친다. 막대끼리 교차하지는 않으며, 닿는 두 막대는 항상 직각으로 만난다. 연결 관계만 유지된다면 형태의 위치, 길이, 전체 회전은 자유롭게 바뀔 수 있다. 연결 관계를 유지한다는 것은 다음을 뜻한다.
- 떨어져 있던 막대를 서로 닿게 만들지 않는다.
- 닿아 있던 막대를 떼어 놓지 않는다.
- 한 막대의 끝점이 다른 막대에 닿아 있으면 그 끝점은 계속 같은 막대에 닿아 있다. 상대 막대의 내부 점에 닿아 있으면 계속 같은 막대의 같은 쪽 내부 점에 닿아 있다.
- 닿는 두 막대가 이루는 직각의 방향(부호)은 유지된다. 모서리와 모서리는 서로 다른 것으로 보므로, 2와 5의 형태는 구별된다.
열 개의 형태는 원본 그림에 제시된 것과 같다. 말로 설명하면, 각 숫자는 다음과 같이 곧은 막대들로 이루어진다(위·아래·왼쪽·오른쪽·가운데는 7세그먼트 표시기의 획을 가리킨다).
- 0 — 직사각형을 이루는 막대 네 개: 위쪽 막대, 아래쪽 막대, 높이 전체의 왼쪽 막대, 높이 전체의 오른쪽 막대.
- 1 — 세로 막대 하나(오른쪽 변).
- 2 — 지그재그로 놓인 막대 다섯 개: 위쪽 막대, 이어서 오른쪽 위로 내려가는 막대, 왼쪽으로 가는 가운데 막대, 왼쪽 아래로 내려가는 막대, 오른쪽으로 가는 아래쪽 막대.
- 3 — 막대 네 개: 위쪽 막대, 높이 전체의 오른쪽 막대, 아래쪽 막대, 그리고 오른쪽 막대의 내부 점에 닿는 가운데 막대.
- 4 — 막대 세 개: 왼쪽 위 세로 막대, 높이 전체의 오른쪽 막대, 그리고 한쪽 끝이 왼쪽 위 막대와 만나고 다른 쪽 끝이 오른쪽 막대의 내부 점에 닿는 가운데 막대.
- 5 — 2의 거울상이며 역시 막대 다섯 개: 위쪽 막대, 이어서 왼쪽 위로 내려가는 막대, 오른쪽으로 가는 가운데 막대, 오른쪽 아래로 내려가는 막대, 왼쪽으로 가는 아래쪽 막대.
- 6 — 막대 다섯 개: 위쪽 막대, 높이 전체의 왼쪽 막대, 아래쪽 막대, 오른쪽 아래 세로 막대, 그리고 왼쪽 막대의 내부 점에 닿는 가운데 막대.
- 7 — 막대 세 개: 위쪽 막대, 그 왼쪽 끝에서 짧게 아래로 내려오는 세로 획, 높이 전체의 오른쪽 막대.
- 8 — 막대 다섯 개: 직사각형의 네 변에, 왼쪽 막대와 오른쪽 막대의 내부 점에 각각 닿는 가운데 막대를 더한 것.
- 9 — 막대 네 개: 위쪽 막대, 왼쪽 위 세로 막대, 높이 전체의 오른쪽 막대, 그리고 오른쪽 막대의 내부 점에 닿는 가운데 막대.
어떤 숫자의 형태는 항상 다른 숫자의 형태를 포함한다. 예를 들어 9의 형태는 항상 1의 형태 네 개, 4의 형태 한 개, 그리고 겹쳐진 7의 형태 두 개를 포함한다. 더 큰 형태 안에 포함된 형태는 무시하고, 서로 연결된 막대들의 극대 집합이 이루는 가장 큰 형태만 센다. 9 하나는 9 한 개로 세고, 1·4·7의 개수에는 전혀 더하지 않는다.
바닥에 각 숫자가 몇 번 나타나는지 세는 것이 문제이다.
입력
입력은 여러 개의 데이터셋으로 이루어진다. 각 데이터셋의 형식은 다음과 같다.
n
xa_1 ya_1 xb_1 yb_1
xa_2 ya_2 xb_2 yb_2
.
.
.
xa_n ya_n xb_n yb_n
첫 번째 줄에는 막대의 개수 이 주어진다. 이어지는 개의 줄은 각각 막대 하나를 하나의 공백으로 구분된 네 정수 , , , 로 나타낸다. 와 는 고정된 직교 좌표계에서 주어지는 막대의 두 끝점 좌표이다. , 임을 가정해도 된다.
입력의 끝은 하나만 있는 줄로 표시된다.
다음도 가정해도 된다.
- 한 점을 세 개 이상의 막대가 공유하지 않는다.
- 모든 막대는 어떤 숫자의 일부이며, 숫자가 아닌 형태는 바닥에 없다.
- 한 숫자의 막대는 다른 숫자의 막대와 닿거나 교차하지 않는다.
- 길이가 0인 막대는 없다.
출력
각 데이터셋마다 하나의 공백으로 구분된 정수 열 개를 한 줄에 출력한다. 이 정수들은 바닥에 숫자 가 각각 몇 번 나타나는지를 순서대로 나타낸다. 그 밖의 문자는 출력하지 않는다.