주사위 퍼즐
시간 제한1초메모리 제한128 MB
표준 주사위 27개로 이루어진 3x3x3 큐브에서 맞닿은 면이 7이 되고 손잡이 방향이 고정된다는 조건 아래, 주어진 윗면과 앞면 정보에 맞는 모든 배치를 찾아 오른쪽 면 합으로 가능한 값을 모두 구합니다.
문제
다음과 같은 주사위 퍼즐을 생각하자.
- 모든 주사위는 마주 보는 두 면의 합이 항상 인 보통의 정육면체 주사위이다(즉 의 반대편은 , 의 반대편은 , 의 반대편은 이다). 모든 주사위의 방향(카이랄성)은 동일하며, 이 위, 가 앞을 향할 때 이 오른쪽에 오는 오른손 방향 주사위이다.
- 이런 주사위 개를 쌓아 정육면체를 만든다.
- 서로 맞닿은 두 주사위의 접촉면에 적힌 두 수의 합은 반드시 이어야 한다. 예를 들어 접촉하는 한 면이 이면 맞닿은 반대쪽 면은 이다.
- 정육면체의 윗면과 앞면에 보이는 주사위 면 중 일부가 주어지고, 나머지 면은 알 수 없다.
- 가능한 배치란 위의 모든 규칙을 지키면서 주어진 윗면·앞면 정보와 일치하도록 개의 주사위를 놓고 방향을 정한 것을 말한다.
가능한 각 배치에 대해 정육면체의 오른쪽 면에 나타나는 개의 수를 모두 더한다. 이 오른쪽 면 합으로 나올 수 있는 값을 모두 구하는 것이 목표이다.
입력
첫 줄에 데이터셋의 개수 이 주어진다. 이어서 개의 데이터셋이 주어진다.
각 데이터셋은 여섯 줄로 이루어진다. 처음 세 줄은 정육면체의 윗면을 격자로 나타낸다.
T11 T12 T13
T21 T22 T23
T31 T32 T33
다음 세 줄은 같은 방식으로 앞면을 격자로 나타낸다.
F11 F12 F13
F21 F22 F23
F31 F32 F33
각 와 는 해당 면에 적힌 수( 이상 이하의 정수)이거나, 그 면을 알 수 없음을 뜻하는 이다. 한 줄의 값들은 공백으로 구분된다.
두 격자의 열에 왼쪽부터 부터 까지 번호를 매긴다. 정육면체는 열마다 하나씩 세 개의 세로 층으로 나뉘며, 윗면 뷰의 번째 열과 앞면 뷰의 번째 열은 같은 층을 나타낸다. 이 층에는 깊이(앞뒤)와 높이(아래위)로 배열된 아홉 개의 주사위가 들어 있다. 그 윗면 뷰 열의 세 값은 이 층의 윗면들을 깊이마다 하나씩 나타내고, 그 앞면 뷰 열의 세 값은 이 층의 앞면들을 높이마다 하나씩 나타낸다. 따라서 층 안에서 특정 깊이와 높이에 있는 주사위는 그 깊이의 윗면과 그 높이의 앞면을 보인다.
출력
각 데이터셋에 대해 가능한 모든 배치를 고려하고, 각 배치마다 정육면체 오른쪽 면의 아홉 개 면 (다른 뷰와 같은 방식으로 번호를 매긴다)의 합, 즉 를 계산한다.
데이터셋마다 한 줄에, 서로 다른 오른쪽 면 합들을 오름차순으로 공백 하나로 구분하여 출력한다. 가능한 배치가 하나도 없으면 하나만 출력한다. 출력은 정확히 일치하는지 비교하므로, 줄 끝에 불필요한 공백을 남기지 않는다.