integer(kind=2)::H,W character,allocatable::map(:,:) character,parameter::riku='#',umi='.' logical,allocatable::covered(:,:) character*3000::string integer::cdist read *,H,W allocate(map(0:W+1,0:H+1)) allocate(covered(0:W+1,0:H+1)) do i=1,H read *, string do j=1,W map(j,i)=string(j:j) end do end do map(0 ,:) =umi map(W+1,:) =umi map(: ,0) =umi map(:,H+1) =umi cdist=1 do i=1,W do j=1,H if(map(i,j).eq.riku) then do l=1,MAX(H,W) if(ANY(map(MIN(i+l,W+1),MAX(0,j-l):MIN(j+l,H+1)).eq.umi) .or. & ANY(map(MAX(i-l,0), MAX(0,j-l):MIN(j+l,H+1)).eq.umi) .or. & ANY(map(MAX(0,i-l):MIN(i+l,W+1),MIN(j+l,H+1)).eq.umi) .or. & ANY(map(MAX(0,i-l):MIN(i+l,W+1),MAX(j-l,0)) .eq.umi) ) then cdist = MAX(cdist,l) exit end if end do end if end do end do print '(i0)',cdist end program