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