/*
#include <stdio.h>
int m, n, i, j;
int p,q,num=0,day=0;
int queue[10000000][2];
int front = -1, rear = -1;
int map[1000][1000] = { 0 };
void enqueue(int x,int y)
{
map[x][y]=1;
queue[++rear][0] = x;
queue[rear][1]=y;
}
void dequeue()
{
p=queue[++front][0];
q=queue[front][1];
}
void bfs(int x, int y)
{
if(x+1 < n && map[x+1][y]==0)
{
enqueue(x+1,y);
}
if(x-1 >=0 && map[x-1][y]==0)
{
enqueue(x-1,y);
}
if(y-1 >=0 && map[x][y-1]==0)
{
enqueue(x,y-1);
}
if(y+1 <m && map[x][y+1]==0)
{
enqueue(x,y+1);
}
}
int main()
{
scanf("%d %d", &m, &n);
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
scanf("%d", &map[i][j]);
if(map[i][j]==1)
{
enqueue(i,j);
}
}
}
while(front!=rear)//
{
num= rear-1;
for(int i=front;i<=num;i++)
{
dequeue();
bfs(p,q);
}day++;
}
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
printf("%d ", map[i][j]);
}
printf("\n");
}
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
if(map[i][j]==0)
{
printf("-1");
return;
}
}
}
printf("%d",day-1);
return 0;
}
*/
/*
#include <stdio.h>
#include <stdlib.h>
int map[1001][1001] = {0};
int queue[10000000][2] = {0};
int rear = 0, front = 0;
int x, y, day;
void enq(int a, int b)
{
queue[rear][0]=a;
queue[rear][1]=b;
map[a][b]=1;
rear++;
}
void diffuse()
{
int max = rear-1;
for(int i = front; i <= max; i++)
{
int a = queue[i][0];
int b = queue[i][1];
if(a-1 >= 0 &&map[a-1][b] == 0 ) enq(a-1,b);
if(a+1 < x &&map[a+1][b] == 0 ) enq(a+1,b);
if(b-1 >= 0 &&map[a][b-1] == 0 ) enq(a,b-1);
if(b+1 < y && map[a][b+1] == 0 ) enq(a,b+1);
front++;
}
}
int main()
{
scanf("%d %d", &y, &x);
for(int i = 0; i < x; i++)
{
for(int j = 0; j < y; j++)
{
scanf("%d", &map[i][j]);
}
}
for(int i = 0; i < x; i++)
{
for(int j = 0; j < y; j++)
{
if(map[i][j] == 1)
{
enq(i,j);
}
}
}
day = 0;
while(rear!=front)
{
diffuse();
day++;
}
for(int i = 0; i < x; i++)
{
for(int j = 0; j < y; j++)
{
if(map[i][j] == 0)
{
printf("-1");
return 0;
}
}
}
printf("%d", day-1);
return 0;
}
*/
#include <stdio.h>