program bottles

implicit none
integer :: nbottles

do nbottles = 99, 1, -1
    call print_bottles(nbottles)
end do

contains

subroutine print_bottles(n)
    implicit none
    integer, intent(in) :: n

    write(*, "(I0, 1X, 'bottles of beer on the wall,')") n
    write(*, "(I0, 1X, 'bottles of beer.')") n
    write(*, "('Take one down, pass it around,')")
    write(*, "(I0, 1X, 'bottles of beer on the wall.', /)") n - 1
end subroutine print_bottles

end program bottles