스도쿠 변형

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

요약
완성된 스도쿠판이 회전, 밴드/스택 교환, 행렬 교환, 숫자 치환으로 다른 판으로 변환 가능한지 판별합니다.
난이도

보통10점 중 6점

유형
완전 탐색, 시뮬레이션, 조합론
정답자
아직 제출이 없습니다

문제

상근이는 매일 아침 신문에 실린 스도쿠 퍼즐을 풀며 하루를 시작한다. 어느 날, 퍼즐을 풀다가 이상한 점을 눈치챘다. 지금 풀고 있는 퍼즐이 어제 풀었던 퍼즐을 90도 회전시킨 것이었기 때문이다. 상근이는 엄청난 배신감을 느꼈다. 물론 퍼즐을 풀기 시작할 때는 이것이 어제 풀었던 퍼즐인지 알 수 없지만, 숫자를 채워 나가다 보면 알게 된다.

상근이는 매우 화가 나 매일 밤을 술로 지새웠고, 더 이상 신문사의 횡포에 당할 수 없다고 생각했다. 그래서 오늘 퍼즐이 어제 퍼즐을 간단한 연산을 통해 만든 것인지 아닌지를 확인해 보려고 한다.

스도쿠 보드는 9×99 \times 9 개의 칸으로 이루어져 있다. 또한 3×33 \times 3 개의 칸이 하나로 묶여 9개의 구역(region)을 이룬다. 처음에는 칸의 일부만 1과 9 사이의 숫자로 채워져 있고, 나머지 칸은 모두 비어 있다. 퍼즐의 목표는 비어 있는 칸을 1부터 9까지의 숫자로 채워서, 모든 행, 모든 열, 모든 구역에 1부터 9까지의 숫자가 딱 한 번씩만 등장하게 하는 것이다. 올바른 스도쿠 퍼즐은 비어 있는 칸을 채우는 방법이 항상 한 가지뿐이다.

허용되는 간단한 연산은 아래와 같다.

  1. 퍼즐 전체를 시계 방향이나 반시계 방향으로 회전시킨다.
  2. 3×93 \times 9 크기의 열 세그먼트를 교환한다.
  3. 9×39 \times 3 크기의 행 세그먼트를 교환한다.
  4. 행 또는 열 전체를 교환한다.
  5. 1부터 9까지의 숫자로 이루어진 순열 ff 를 모든 칸에 적용한다. 즉, 모든 칸의 값 xx 를 f(x)f(x) 로 바꾼다.

위의 모든 연산은 스도쿠의 정답(완성된 판)에 적용되며, 변환하기 전에 풀 수 있었던 스도쿠는 변환한 뒤에도 풀 수 있다.

입력

첫째 줄에 테스트 케이스의 개수 NN 이 주어진다. (0≤N≤500 \le N \le 50)

각 테스트 케이스의 처음 9개 줄은 어제 퍼즐의 정답이며, 다음 9개 줄은 오늘 퍼즐이다. 비어 있는 칸은 0으로 주어진다.

각 테스트 케이스의 사이에는 빈 줄이 하나씩 주어진다. 어제 퍼즐은 항상 올바른 스도쿠이며, 오늘 퍼즐의 정답도 항상 한 가지이다.

출력

각 테스트 케이스에 대해서, 오늘 퍼즐이 어제 퍼즐의 변형이면 Yes 를, 아니면 No 를 출력한다.

예제1

  1. 예제 1

    입력
    2
    963174258
    178325649
    254689731
    821437596
    496852317
    735961824
    589713462
    317246985
    642598173
    060104050
    200000001
    008305600
    800407006
    006000300
    700901004
    500000002
    040508070
    007206900
    
    534678912
    672195348
    198342567
    859761423
    426853791
    713924856
    961537284
    287419635
    345286179
    010900605
    025060070
    870000902
    702050043
    000204000
    490010508
    107000056
    040080210
    208001090
    
    예상 출력
    Yes
    No