#include <stdio.h>
int queue[10000][2] = {};
int front=0,rear=0;
int map[1001][1001]= {};
int day=0;
int i,j,n,m;
void ripen()
{
int max = front-1;
for(i=rear; i<=max; i++)
{
int a = queue[i][0];
int b = queue[i][1];
if(map[a-1][b]==0 && a-1>=0)
{
queue[front][0]=a-1;
queue[front][1]=b;
map[a-1][b]=1;
front++;
}
if(map[a+1][b]==0 && a+1<n)
{
queue[front][0]=a+1;
queue[front][1]=b;
map[a+1][b]=1;
front++;
}
if(map[a][b-1]==0 && b-1>=0)
{
queue[front][0]=a;
queue[front][1]=b-1;
map[a][b-1]=1;
front++;
}
if(map[a][b+1]==0 && b+1<m)
{
queue[front][0]=a;
queue[front][1]=b+1;
map[a][b+1]=1;
front++;
}
rear++;
}
}
void function()
{
while(1)
{
if(front!=rear)
{
ripen();
day++;
}
else
{
return;
}
}
}
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)
{
queue[front][0]=i;
queue[front][1]=j;
front++;
}
}
}
day =0;
function();
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
if(map[i][j]==0)
{
printf("-1");
return 0;
}
}
}
printf("%d", day-1);
return 0;
}
#include<stdio.h>
int arrN[1000001]= {0};
int n,m;
int left,right;
func(int a)
{
int mid = (left+right)/2;
if(left==right && arrN[left]!=a)
{
printf("-1 ");
return;
}
if(arrN[1]>a || arrN[n]<a)
{
printf("-1");
return;
}
/*
if(left+1==right)
{
if(arrN[left]<a && a<arrN[right])
{
printf("-1 ");
return;
}
else if(arrN[right]==a)
{
printf("%d ", right);
return;
}
}
*/
if(arrN[mid] == a)
{
printf("%d ",mid);
return;
}
else if(arrN[mid] > a)
{
right = mid-1;
func(a);
}
else
{
left = mid+1;
func(a);
}
}
int main()
{
int i;
int a;
scanf("%d",&n);
for(i=1; i<=n; i++)
{
scanf("%d",&arrN[i]);
}
scanf("%d",&a);
left = 1;
right = n;
func(a);
scanf("%d",&m);
for(i=1; i<=m; i++)
{
scanf("%d",&a);
left = 1;
right = n;
func(a);
}
}