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
