주사위 퍼즐

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

문제

다음과 같은 주사위 퍼즐을 생각하자.

  1. 모든 주사위는 마주 보는 두 면의 합이 항상 $7$인 보통의 정육면체 주사위이다(즉 $1$의 반대편은 $6$, $2$의 반대편은 $5$, $3$의 반대편은 $4$이다). 모든 주사위의 방향(카이랄성)은 동일하며, $1$이 위, $2$가 앞을 향할 때 $3$이 오른쪽에 오는 오른손 방향 주사위이다.
  2. 이런 주사위 $27$개를 쌓아 $3 \times 3 \times 3$ 정육면체를 만든다.
  3. 서로 맞닿은 두 주사위의 접촉면에 적힌 두 수의 합은 반드시 $7$이어야 한다. 예를 들어 접촉하는 한 면이 $2$이면 맞닿은 반대쪽 면은 $5$이다.
  4. 정육면체의 윗면앞면에 보이는 주사위 면 중 일부가 주어지고, 나머지 면은 알 수 없다.
  5. 가능한 배치란 위의 모든 규칙을 지키면서 주어진 윗면·앞면 정보와 일치하도록 $27$개의 주사위를 놓고 방향을 정한 것을 말한다.

가능한 각 배치에 대해 정육면체의 오른쪽 면에 나타나는 $9$개의 수를 모두 더한다. 이 오른쪽 면 합으로 나올 수 있는 값을 모두 구하는 것이 목표이다.

입력

첫 줄에 데이터셋의 개수 $N$이 주어진다. 이어서 $N$개의 데이터셋이 주어진다.

각 데이터셋은 여섯 줄로 이루어진다. 처음 세 줄은 정육면체의 윗면을 $3 \times 3$ 격자로 나타낸다.

T11 T12 T13
T21 T22 T23
T31 T32 T33

다음 세 줄은 같은 방식으로 앞면을 $3 \times 3$ 격자로 나타낸다.

F11 F12 F13
F21 F22 F23
F31 F32 F33

각 $T_{ij}$와 $F_{ij}$는 해당 면에 적힌 수($1$ 이상 $6$ 이하의 정수)이거나, 그 면을 알 수 없음을 뜻하는 $0$이다. 한 줄의 값들은 공백으로 구분된다.

두 격자의 열에 왼쪽부터 $1$부터 $3$까지 번호를 매긴다. 정육면체는 열마다 하나씩 세 개의 세로 층으로 나뉘며, 윗면 뷰의 $j$번째 열과 앞면 뷰의 $j$번째 열은 같은 층을 나타낸다. 이 층에는 깊이(앞뒤)와 높이(아래위)로 배열된 아홉 개의 주사위가 들어 있다. 그 윗면 뷰 열의 세 값은 이 층의 윗면들을 깊이마다 하나씩 나타내고, 그 앞면 뷰 열의 세 값은 이 층의 앞면들을 높이마다 하나씩 나타낸다. 따라서 층 안에서 특정 깊이와 높이에 있는 주사위는 그 깊이의 윗면과 그 높이의 앞면을 보인다.

출력

각 데이터셋에 대해 가능한 모든 배치를 고려하고, 각 배치마다 정육면체 오른쪽 면의 아홉 개 면 $R_{ij}$(다른 뷰와 같은 방식으로 번호를 매긴다)의 합, 즉 $\sum_{i=1}^{3}\sum_{j=1}^{3} R_{ij}$를 계산한다.

데이터셋마다 한 줄에, 서로 다른 오른쪽 면 합들을 오름차순으로 공백 하나로 구분하여 출력한다. 가능한 배치가 하나도 없으면 $0$ 하나만 출력한다. 출력은 정확히 일치하는지 비교하므로, 줄 끝에 불필요한 공백을 남기지 않는다.