#include <iostream>
#include <deque>
usingnamespacestd;#define MAXN 1001
intT,N,srow,scol,_max;intmap[MAXN][MAXN];intvisit[MAXN][MAXN];intmaxarr[MAXN][MAXN];#define ISVALID(r, c) (r >= 1 && r <= N && c >= 1 && c <= N)
constintdir[4][2]={{-1,0},{1,0},{0,-1},{0,1}};intdfs(intdepth,introw,intcol){intnextrow,nextcol,ret=0,temp;boolflag=true;for(inti=0;i<4;i++){nextrow=row+dir[i][0];nextcol=col+dir[i][1];if(ISVALID(nextrow,nextcol)&&map[nextrow][nextcol]==map[row][col]+1){flag=false;if(visit[nextrow][nextcol]!=0){temp=maxarr[nextrow][nextcol]+1;}else{visit[nextrow][nextcol]=1;temp=dfs(depth+1,nextrow,nextcol)+1;// 현재 좌표에서 갈 수 있는 최대 거리 반환, 현재 좌표의 최대 값 갱신// 최대 값을 반환}if(temp>ret){ret=temp;maxarr[row][col]=ret;visit[row][col]=1;}}elseif(i==3&&flag){// 방문할 방이 없을 경우maxarr[row][col]=1;visit[row][col]=1;return1;}}returnret;}voidsolve(){intnextrow,nextcol,ret;for(inti=1;i<=N;++i){for(intj=1;j<=N;++j){if(visit[i][j]==0){//cout << "visiting : " << i << ", " << j << "\n";visit[i][j]=1;ret=dfs(1,i,j);if(ret>_max){_max=ret;srow=i;scol=j;}elseif(ret==_max){if(map[i][j]<map[srow][scol]){srow=i;scol=j;}//srow = map[i][j] < map[srow][scol] ? i : srow;//scol = map[i][j] < map[srow][scol] ? j : scol;}//visit[i][j] = 0;}}}}intmain(){cin>>T;for(inti=1;i<=T;++i){srow=scol=0;_max=-0x7fffffff;cin>>N;for(intj=1;j<=N;++j){for(intk=1;k<=N;++k){cin>>map[j][k];visit[j][k]=maxarr[j][k]=0;}}solve();cout<<"#"<<i<<" "<<map[srow][scol]<<" "<<maxarr[srow][scol]<<"\n";}}