# Topic : Implementation _ 오목
#
# Python 3 : 88ms
# (x,y)는 고정되어 특정 방향으로만 탐색을 수행(dfs,bfs 둘다 아닌듯..?)
def checkEnd(i,j,x,y,count):
if count == 5: # count가 5가 된다면 6목이 되는지의 여부를 확인하고 6목이라면 -1을 아니라면 count를 return한다.
if 0 <= i+x <= 18 and 0 <= j+y <= 18:
if field[i][j] == field[i+x][j+y]:
return -1
else:
return count
else:
return count
if 0 <= i+x <= 18 and 0 <= j+y <= 18: # 움직인 다음칸이 field 범위 안에 있는 경우
if field[i][j] == field[i+x][j+y]: # 다음칸의 돌이 같은 돌인 경우 count++ and 다음칸 다시 호출
count += 1
return checkEnd(i+x,j+y,x,y,count)
else:
return -1
field = list()
for _ in range(19):
field.append(list(map(int,input().split())))
element = list()
for i in range(19): # 돌이 놓여져 있는 부분의 인덱스 저장
for j in range(19):
if field[i][j] == 0:
continue
element.append((i,j))
# 오목이 연결될 수 있는 x, y의 경우의 수
dx = [-1,-1,0,1,1,1,0,-1]
dy = [0,-1,-1,-1,0,1,1,1]
result = list()
for ele in element:
for i in range(8): # dx,dy를 돌면서 다음으로 갈수 있는 돌이 있는지 확인
if 0 <= ele[0]+dx[i] <= 18 and 0 <= ele[1]+dy[i] <= 18: # 움직인 다음칸이 field 범위 안에 있는 경우
if field[ele[0]][ele[1]] == field[ele[0]+dx[i]][ele[1]+dy[i]]: # 연결된 다음 돌이 전돌과 같은 경우
check = checkEnd(ele[0],ele[1],dx[i],dy[i],1) # 해당 방향으로 checkEnd를 실행한다.
if check == 5: # checkEnd의 return 값이 5인경우 해당 방향의 정반대 방향이 해당 돌과 같은 돌이 아닌경우(같다면 6목이 된다)에만 result에 append 해준다.
if 0 <= ele[0]-dx[i] <= 18 and 0 <= ele[1]-dy[i] <= 18 and field[ele[0]][ele[1]] == field[ele[0]-dx[i]][ele[1]-dy[i]]:
break
else:
result.append((ele[1],ele[0])) # 이때 문제에서 요구하는 왼쪽부터 정렬 기준에 맞추기 위해(이후 min 함수를 사용하려고) x,y를 반대로 저장해준다.
break
if len(result) == 0: # 완성된 오목이 하나도 없다면 result == 0
print(0)
else:
y, x = min(result) # 왼쪽부터 정렬 기준에 맞추고 원래대로 x,y를 저장해준다.
print(field[x][y])
print(x+1,y+1)