#가로 성공 여부
def width(sudoku):
for i in range(9):
flag = 0
for num in range(1, 10):
if sudoku[i].count(num) != 1:
flag = 1
break
if flag :
return 0
return 1
#세로 성공 여부
def height(sudoku):
for x in range(9):
flag = 0
check_num = [0 for _ in range(9)]
for y in range(9):
check_num[sudoku[y][x]-1] += 1
for num in check_num :
if num != 1:
flag = 1
break
if flag :
return 0
return 1
#정사각형 형태 성공 여부
def square(sudoku):
for i in range(3):
for j in range(3):
flag = 0
check_num = [0 for _ in range(9)]
for y in range(3*i, 3*i + 3):
for x in range(3*j, 3*j+3):
check_num[sudoku[y][x]-1] += 1
for num in check_num:
if num != 1:
flag = 1
break
if flag :
return 0
return 1
T = int(input())
for case in range(1, T+1):
sudoku = []
for i in range(9):
now = list(map(int,input().split()))
sudoku.append(now)
if width(sudoku) and height(sudoku) and square(sudoku):
result = 1
else :
result = 0
print(f'#{case} {result}')
특이한 케이스가 존재하지 않고, 주어진 조건대로 진행하면 해결할 수 있어 무난한 문제였다.