#include <stdio.h>
#include <stdlib.h>
#define Max 65535
int map[1024][1024];
int visited[1024][1024];
int cnt=0;
int min=Max;
int next[3][2]={
{-1,0},/*up*/
{0,1},/*right*/
{-1,1}/* right up*/
};
int route[Max][2];
int m,n;
void visit(int x, int y,int step) {
int tx,ty;
if(x==0 && y==n-1) {
cnt++;
printf("step=%d\n",step);
for(int i=0;i<step;i++) {
printf("%d %d\n",route[i][0],route[i][1]);
}
printf("\n");
if(step<min) min=step;
return;
}
int k;
for(k=0;k<3;k++) {
tx=x+next[k][0];
ty=y+next[k][1];
if(tx<0 || tx>=m || ty<0 || ty>=n) {
continue;
}
if( (map[tx][ty] ==1 ) && (visited[tx][ty]==0) ) {
visited[tx][ty]=1;
route[step][0]=next[k][0];
route[step][1]=next[k][1];
visit(tx,ty,step+1);
visited[tx][ty]=0;
}
}
return;
}
int main(int argc, char* argv[])
{
while(scanf("%d%d",&m,&n)!=EOF)
{
int i,j;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&map[i][j]);
}
}
visited[m-1][0];
visit(m-1,0,0);
printf("%d\n",cnt);
printf("%d\n",min);
}
return 0;
}
/*
3 3
1 1 1
1 0 1
1 1 1
*/