/*
* 1970_1.cpp
*
* Created on: 2013年10月6日
* Author: Administrator
*/
#include <iostream>
#include <cstdio>
using namespace std;
int d[4][2] = {{0,1},{1,0},{1,1},{-1,1} };//方向矢量
/**
* 判断点(x,y)是否在边界里面
*/
bool valid(int x , int y){
return (x >=0 && x < 19 && y >= 0 && y < 19);
}
int a [20][20];//棋盘
int main(){
int t;
scanf("%d",&t);
while(t--){
int i,j,k,u;
int x,y;
for(i = 0 ; i < 19 ; ++i){
for(j = 0 ; j < 19 ; ++j){
scanf("%d",&a[i][j]);
}
}
for(j = 0 ; j < 19 ; ++j){
for(i = 0 ; i < 19 ; ++i){
//这个必须要有,因为0表示的是该位置没有棋子,只有在有棋子的情况下,该位置才有意义
if(a[i][j] == 0){
continue;
}
for(k = 0 ; k < 4 ; ++k){
//如果反方向同色,换方向
x = i - d[k][0];
y = j - d[k][1];
if(valid(x,y) && a[x][y] == a[i][j]){
continue;
}
//如果延伸5格后越界,换方向
x = i + d[k][0]*4 ;
y = j + d[k][1]*4;
if(!valid(x,y)){
continue;
}
//如果
for(u = 0 ; u < 5 ; ++u){
x = i + d[k][0]*u;
y = j + d[k][1]*u;
if(a[x][y] != a[i][j]){
break;
}
}
如果5格同色,但6格也同色,也换方向
x = i + d[k][0]*5;
y = j + d[k][1]*5;
if(valid(x,y) && a[x][y] == a[i][j]){
continue;
}
//表示找到了5格同色但6个不同色的情况
if(u == 5){
break;
}
}
if(k < 4){
break;
}
}
if(i < 19){
break;
}
}
if(j < 19){
printf("%d\n",a[i][j]);
printf("%d %d\n",i + 1, j + 1);
}else{
printf("0\n");
}
}
}