6 5
1 1 0 1 1
1 0 1 1 1
1 0 1 0 0
1 0 1 1 1
1 1 1 0 1
1 1 0 1 1
1 0 1 1 1
1 0 1 0 0
1 0 1 1 1
1 1 1 0 1
1 1 1 1 1
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=100;
int maps[maxn][maxn];
int mark[maxn][maxn];
int queues[maxn*maxn];
int m,n;
void bfs()
{
int i=0,ps=0,j=0,sum=0,now=0;
queues[ps++]=0;
while(now<=ps)
{
if(i==0&&j==n-1)
break;
i=queues[now]/100;
j=queues[now++]%100;
if(i+1<m&&maps[i+1][j]==1&&mark[i+1][j]==0){
queues[ps++]=(i+1)*100+j;
mark[i+1][j]=1;
printf("%d %d\n",i+1,j);
}
if(j+1<n&&maps[i][j+1]==1&&mark[i][j+1]==0){
queues[ps++]=i*100+j+1;
mark[i][j+1]=1;
printf("%d %d\n",i,j+1);
}
//getchar();
sum++;
}
printf("%d\n",sum);
}
int main()
{
int i,j,sum,ps;
while(scanf("%d %d",&m,&n)!=EOF)
{
for(i=0;i<m;i++)
for(j=0;j<n;j++)
scanf("%d",&maps[i][j]);
memset(mark,0,sizeof(mark));
bfs();
}
return 0;
}