subroutine create_map(map,H,W) implicit none logical,parameter::riku=.true.,umi=.false. character*3000::string integer(kind=4)::H,W,i,j logical,allocatable::map(:,:) read *,H,W allocate(map(0:W+1,0:H+1)) do i=1,H read *, string do j=1,W if(string(j:j)=='.') then map(j,i)=umi else map(j,i)=riku end if end do end do map(0 ,:) =umi map(W+1,:) =umi map(: ,0) =umi map(:,H+1) =umi end subroutine create_map integer function get_stream(map,H,W) integer(kind=4)::H,W,i,j,closest logical,parameter::riku=.true.,umi=.false. integer,allocatable::length(:) logical,allocatable::map(:,:) allocate(length(MAX(H,W))) length =0 do i=1,W closest=0 do j=1,H if(map(i,j).eqv.riku) then length(j)=j-closest else closest=j end if end do end do get_stream=MAXVAL(length) length =0 do j=1,H closest=0 do i=1,W if(map(i,j).eqv.riku) then length(i)=i-closest else closest=i end if end do end do get_stream=MIN(MAXVAL(length), get_stream) end function get_stream program main implicit none interface subroutine create_map(map,H,W) logical,allocatable::map(:,:) integer::H,W end subroutine create_map integer function get_stream(map,H,W) integer(kind=4)::H,W logical,allocatable::map(:,:) end function get_stream end interface integer(kind=4)::H,W logical,allocatable::map(:,:) logical,parameter::riku=.true.,umi=.false. integer,allocatable::dist_h(:),dist_w(:) integer::i,j,k,l,max_dist=1,dist,length call create_map(map,H,W) length = get_stream(map,H,W)-1 do dist=length,0,-1 do i=dist,W-dist+1 do j=dist,H-dist+1 if(map(i,j).eqv.riku) then if(ALL(ALL(map(i-dist:i+dist,j-dist:j+dist),1))) then print '(i0)', dist+1 return end if end if end do end do end do end program main