//#include<stdio.h>
//int arr2[5]= {}, arr[20][20]= {}, dir[4][2]= {{+1, 0},{0, +1},{+1, +1},{+1, -1}};
//void dfs(int x, int y, int z, int d)
//{
// if(x<0 || y<0 || x>19 || y>19 || arr[x][y]!=z)
// {
// return;
// }
// arr2[d]++;
// dfs(x+dir[d][0], y+dir[d][1], z, d);
// return;
//}
//int main()
//{
// int i, j, l, n, a, b;
// for(i=0; i<19; i++)
// {
// for(j=0; j<19; j++)
// {
// scanf("%d", &arr[j][i]);
// }
// }
// for(i=0; i<19; i++)
// {
// for(j=0; j<19; j++)
// {
// if(arr[i][j]!=0)
// {
// for(b=0; b<4; b++)
// {
// if(arr[i-dir[b][0]][j-dir[b][1]]!=arr[i][j])
// {
// dfs(i, j, arr[i][j], b);
// }
// }
// for(l=0; l<4; l++)
// {
// if(arr2[l]==5)
// {
// printf("%d\n%d %d", arr[i][j], j+1, i+1);
// return 0;
// }
// arr2[l]=0;
// }
// }
// }
// }
//
// printf("0");
// return 0;
//}
#include<stdio.h>
int s=0, back=-1, front=-1, m, n, p1, p2, v[1001][1001]={}, arr[1001][1001]={}, queue[1002002][2]={};
int dir[4][2]={{-1, 0},{0, +1},{+1, 0},{0, -1}};
void push(int a, int b)
{
if(v[a][b]==1 || a<0 || b<0 || a>=n || b>=m)
{
return;
}
queue[++back][0]=a;
queue[back][1]=b;
v[a][b]=1;
arr[a][b]=1;
return;
}
int pop()
{
front++;
return queue[front][0];
}
int pop2()
{
return queue[front][1];
}
void bfs(int x, int y)
{
for(int i=0; i<4; i++)
{
push(x+dir[i][0], y+dir[i][1]);
}
}
int main()
{
int i, j, a;
scanf("%d %d", &m, &n);
for(i=0; i<n; i++)
{
for(j=0; j<m; j++)
{
scanf("%d", &arr[i][j]);
}
}
for(i=0; i<n; i++)
{
for(j=0; j<m; j++)
{
if(arr[i][j]==1)
{
push(i, j);
}
}
}
while(front!=back)
{
s++;
p1=pop();
p2=pop2();
printf("%d %d", p2+1, p1+1);
bfs(p1, p2);
printf("\n");
for(i=0; i<n; i++)
{
for(j=0; j<m; j++)
{
printf("%d ", arr[i][j]);
}
printf("\n");
}
}
printf("%d", s);
}