7세그먼트 카운터
시간 제한1초메모리 제한128 MB
일부 막대가 가려진 시각별 사진들과 촬영 시각을 바탕으로 15시 정각에 가능한 계수기 값을 셉니다.
문제
7세그먼트 표시기는 막대 7개로 0부터 9까지의 숫자 하나를 나타내는 장치다. 환전소나 주유소의 가격판에서 흔히 볼 수 있다.
셸비는 이런 표시기 3개를 회로에 연결해서 0 이상 999 이하의 수를 앞자리 0 없이 보여주는 세 자리 표시기를 만들었다. 여기에 1초마다 수가 1씩 올라가고 999 다음에는 다시 0으로 돌아가는 순환 카운터 기능까지 붙였다.
셸비는 회사의 기술자이고, 이 세 자리 카운터는 사무실 벽에 걸려 있다. 셸비는 퇴근 시각인 매일 15:00:00에 카운터가 가리키는 수를 종이에 적어야 한다. 보안 때문에 사장이 직접 시킨 일이다.
그런데 어제는 그 수를 적는 것을 잊어버렸다. 다행히 15:00:00이나 그 이후에 여러 감시 카메라가 찍은 사진을 구했다. 문제는 사진마다 막대 21개 중 일부가 켜졌는지 꺼졌는지 또렷하게 보이지 않는다는 점이다.
사진마다 막대 21개의 상태(보이면서 켜짐, 보이면서 꺼짐, 이 사진에서는 보이지 않음)와 찍힌 시각이 주어진다. 15:00:00에 카운터가 가리키던 수를 구하라.
입력
입력은 여러 테스트 케이스로 이루어진다. 한 테스트 케이스에는 사진이 1개 이상 20개 이하로 들어 있다.
사진 하나는 6줄이다. 첫 줄에는 15:00:00부터 몇 초가 지났는지를 나타내는 61200 이하의 음이 아닌 정수 하나가 주어진다. 이어지는 5줄이 사진이다.
막대 21개가 모두 보이면서 켜져 있으면, 즉 표시기가 888을 가리키면 5줄은 다음과 같다.
- - -
| || || |
- - -
| || || |
- - -
보이지만 꺼져 있는 막대 자리에는 -나 | 대신 마침표 .를 쓴다. 이 사진에서 보이지 않는 막대 자리에는 별표 *를 쓴다.
또렷한 사진에서 0부터 9까지의 숫자는 다음과 같이 나타난다. 오른쪽 끝의 off는 막대 7개가 모두 꺼져서 아무 숫자도 표시하지 않는 자리다.
0 1 2 3 4 5 6 7 8 9 off
- . - - . - - - - - .
| | . | . | . | | | | . | . . | | | | | . .
. . - - - - - . - - .
| | . | | . . | . | . | | | . | | | . | . .
- . - - . - - . - - .
카운터는 앞자리 0을 표시하지 않는다. 예를 들어 값이 70이면 왼쪽에서 두 번째 자리에 7이, 세 번째 자리에 0이 나타나고 첫 번째 자리는 막대가 모두 꺼진다. 070으로 표시하지는 않는다.
테스트 케이스와 테스트 케이스 사이에는 # 한 글자만 있는 줄이 들어간다. 입력의 마지막 줄에는 $ 한 글자만 있다.
줄 왼쪽에는 공백이 더 붙지 않지만 줄 오른쪽 끝에는 공백이 더 붙어 있을 수 있다. 의미가 있는 것은 왼쪽부터 9개 열뿐이다.
출력
테스트 케이스마다 15:00:00의 카운터 값을 알아낼 수 있으면, 즉 모든 사진과 맞아떨어지는 값이 하나뿐이면 그 값을 출력한다.
알아낼 수 없으면 물음표 ?를 먼저 쓰고 공백 하나를 둔 다음, 15:00:00에 카운터가 가리켰을 수 있는 서로 다른 값의 개수를 쓴다. 사진끼리 서로 어긋나서 가능한 값이 하나도 없으면 ? 0을 출력한다.