Tantrix
시간 제한1초메모리 제한128 MB
육각 타일 게임 Tantrix에서 강제 칸과 통제 변 규칙을 반영해 손에 든 타일을 놓을 수 있는 합법적인 수의 개수를 구합니다.
문제
Tantrix는 육각형 타일 56장으로 두 사람이 하는 게임이다. 타일마다 서로 다른 색 링 세 개가 그려져 있다. 두 사람은 각각 타일 다섯 장을 손에 들고 번갈아 판에 내려놓는다.
링의 색은 빨강, 초록, 노랑, 파랑 네 가지다. 모양이 같은 타일은 없고, 회전 대칭인 타일도 없다. 타일 하나는 여섯 글자 문자열로 주어진다. 위쪽 변의 링부터 시계 방향으로 각 변의 색을 적은 것이며, 대문자 R, G, Y, B가 각각 빨강, 초록, 노랑, 파랑을 뜻한다.
이 문제에서 한 수는 손에 든 타일 하나를 판의 빈 칸에 놓는 것이고, 다음 규칙을 지켜야 한다.
- 타일은 항상 이미 놓인 타일에 붙여서 놓는다.
- 맞닿은 두 변의 링은 색이 같아야 한다.
- 타일 세 개 이상에 둘러싸인 빈 칸을 강제 칸이라고 한다. 손에 든 타일 하나를 강제 칸에 놓을 수 있으면 반드시 그렇게 놓아야 한다. 강제 칸이 여러 개거나 놓는 방법이 여러 가지면 그중 아무거나 골라도 된다.
- 같은 색 링 세 개와 맞닿는 강제 칸이 생기도록 타일을 놓을 수 없다. 그런 칸에는 어떤 타일도 놓을 수 없기 때문이다.
- 강제 칸을 따라 뻗는 두 방향의 칸을 통제 칸이라고 하며, 통제 칸에는 타일을 놓을 수 없다.
강제 칸이 하나라도 있지만 손에 든 타일을 그 어느 강제 칸에도 놓을 수 없으면, 다른 합법적인 수를 두면 된다. 규칙 4 때문에 강제 칸에 타일을 놓지 못하는 경우도 있다.
통제 칸의 정의는 이렇다. 이미 놓인 타일과 한 변이라도 맞닿은 빈 칸을 경계 칸이라고 하자. 강제 칸 F와 방향 가 다음 조건을 만족한다고 하자. F의 방향 이웃은 비어 있고, 또는 방향 이웃에는 타일이 놓여 있다. 방향 번호는 타일 문자열과 같은 시계 방향 순서이며 6으로 나눈 나머지로 센다. 이때 F에서 방향으로 한 칸씩 계속 나아가며 지나는 칸은 모두 통제 칸이다. 경계 칸이 아닌 칸이나 강제 칸에 닿으면 거기서 멈추고, 그 칸은 통제 칸이 아니다. F 둘레의 타일이 끊기지 않고 이어져 있으면 조건을 만족하는 방향 는 정확히 두 개다.
이미 놓인 타일의 위치와 방향, 그리고 둘 차례인 사람이 손에 든 타일이 주어질 때 놓을 수 있는 수가 몇 개인지 세어라. 같은 타일이라도 놓는 칸이나 방향이 다르면 서로 다른 수로 센다.
입력
첫 줄에 테스트 케이스의 수가 주어진다. 최대 50개다.
각 테스트 케이스의 첫 줄에는 이미 놓인 타일의 수 이 주어진다 (). 다음 개의 줄에는 정수 와 , 그리고 여섯 글자 타일 설명이 주어진다. 설명의 첫 글자는 위쪽 변의 링 색이고 나머지는 시계 방향 순서다. 그다음 줄에는 손에 든 타일 다섯 장의 설명이 공백 하나로 구분되어 주어진다.
칸 의 여섯 이웃은 위쪽 변부터 시계 방향으로 , , , , , 이다. 타일 설명의 번째 글자는 0부터 세어 이 순서의 번째 이웃과 맞닿은 변의 링 색이다. 판은 무한하므로 좌표에 제한은 없다. 입력의 타일은 모두 유효하고 서로 다르며, 배치는 합법적인 게임에서 나올 수 있는 것이다. 놓인 타일 중 하나는 좌표가 0 0이다.
출력
각 테스트 케이스마다 놓을 수 있는 수의 개수를 한 줄에 출력한다.