/*
#include <stdio.h>
int a[11][11]= {}; //원본
int b[11][11]= {};
//not visited -1
// visited sum
void dfs(int x, int y)
{
//종료조건1
if(x>9||y>9||x<1||y<1||b[x][y]!=-1)
return ;
//종료조건2 ( 내 주위 지뢰갯수가 0개가 아닐때)
int sum=0;
for(int i=x-1; i<=x+1; i++)
for(int j=y-1; j<=y+1; j++)
sum+=a[i][j];
b[x][y]=sum; //visited
if(sum!=0)
return ;
dfs(x-1, y);
dfs(x, y-1);
dfs(x+1, y);
dfs(x, y+1);
dfs(x-1, y-1);
dfs(x+1, y-1);
dfs(x+1, y+1);
dfs(x-1, y+1);
}
int main()
{
int i, j, x, y;
for(i=1; i<=9; i++)
{
for(j=1; j<=9; j++)
{
scanf("%d", &a[i][j]);
b[i][j]=-1; //not visited
}
}
scanf("%d %d", &x, &y);
if(a[x][y]==1)
{
for(i=1; i<=9; i++)
{
for(j=1; j<=9; j++)
{
if(i==x&&j==y)
printf("-1 ");
else
printf("_ ");
}
printf("\n");
}
return 0;
}
dfs(x,y);
for(i=1; i<=9; i++)
{
for(j=1; j<=9; j++)
{
if(b[i][j]!=-1)
printf("%d ", b[i][j]);
else
printf("_ ");
}
printf("\n");
}
return 0;
}
dfs = 재귀 (끝을 발견 돌아와)
bfs =
*/
#include<stdio.h>
int a[26][26]= {};
int k, num=0;
int dx,dy;
int queue[2][10000]={};
int f=-1,r=-1;
void enq(int x, int y)
{
a[x][y]=0;
r++;
queue[0][r]=x;
queue[1][r]=y;
}
void deq()
{
f++;
dx=queue[0][f];
dy=queue[1][f];
}
void bfs(int x, int y) // a[x][y]에서 dfs
{
if( x+1<k && a[x+1][y]==1 ) enq(x+1,y);
if(y+1<k && a[x][y+1]==1) enq(x, y+1);
if( x-1>=0 && a[x-1][y]==1 ) enq(x-1,y);
if(y-1>=0 && a[x][y-1]==1) enq(x, y-1);
}
int main()
{
int i, j, n=0;
scanf("%d", &k);
for(i=0; i<k; i++)
{
for(j=0; j<k; j++)
scanf("%1d", &a[i][j]);
}
enq(0,1);
while(f!=r)
{
deq();
printf("%d %d\n",dx,dy);
bfs(dx,dy);
n++;
}
printf("%d", n);
}