program and_grid
  implicit none
  integer :: h, w, i, j, k
  integer :: r(500,500), b(500,500)
  character(500) :: s
  r = 0
  b = 0
  read(*,*) h, w
  do i = 1, h
    read(*,*) s
    s = trim(adjustl(s))
    do j = 1, w
      if (s(j:j).eq."#") then
        r(i,j) = 1
        b(i,j) = 1
      end if
    end do
  end do
  do i = h-1, 2, -1
    do j = 1, w
      if (r(i,j).gt.0.and.r(i-1,j).eq.0) r(1:i,j) = 1
    end do
  end do
  r(1,2:w-1) = 1
  do j = w-1, 2, -1
    do i = 1, h
      if (b(i,j).gt.0.and.b(i,j-1).eq.0) then
        do k = 1, j
          if (r(i,k).eq.0) b(i,k) = 1
        end do
      end if
    end do
  end do
  b(2:h-1,1) = 1
  call output(r(1:h,1:w))
  write(*,*)
  call output(b(1:h,1:w))
  stop
contains
  subroutine output(a)
    implicit none
    integer, intent(in) :: a(:,:)
    integer :: h, w, i
    character(500) :: s
    h = size(a(:,1))
    w = size(a(1,:))
    do i = 1, h
      s = ""
      do j = 1, w
        s(j:j) = "."
        if (a(i,j).gt.0) s(j:j) = "#"
      end do
      write(*,'(a)') trim(adjustl(s))
    end do
    return
  end subroutine output
end program and_grid