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