# 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)