# [Fortran (GFortran)] `-cpp`, <s>409</s> <s>389</s> <s>383</s> 346 bytes

```lang-fortran
#define q(z)trim(z)
character(16)a,b,c,w,x
a=' bottles of beer';b=a;c=' bottle of beer';w=' on the wall'
do i=99,1,-1
write(x,'(i8)')i;x=adjustl(x);if(i<2)b=c
print*,q(x),q(b),q(w),', ',q(x),q(b),'.'
if(i>1)print*,'Take one down, pass it around, ',q(x),q(b),q(w),'.',new_line(x)
enddo
print*,"Go to the store and buy some more, 99",a,q(w),"."
end
```

[Try it online!][TIO-lxkotvjd]

The `-cpp` option allows me to `#define` a helper macro. Maybe one day Fortran will have stretchy strings but for now I have to use `trim()` everywhere.<br>
<i><sub>Confession: the latest version (346b) is CoPilot assisted.</sub></i>

[Fortran (GFortran)]: https://gcc.gnu.org/fortran/
[TIO-lxkotvjd]: https://tio.run/##VZBLT8MwDMfv@RRWOaRB3qRyQFSlXPkC3JHz6JbRJl2SKYUPT8kYz4tt/ey/X4MPKZDb7IZLsK5X2gzWGTjWbyIFOxXH1J4CqWRC3dwKQokKMy6Meg7SpzSaCH4AaUzgneypUz@JX54L8w7S3kCmceRMe7B922KDm4blYJOpF@S1vRNc2G7pSR9OMY31Ijo71Pb@RshesTlYl67xWHAx8myyQI7A/zC@5eyseWjEVz1/opeyTLlL@@wQZooRbAIK/uT0f/Wl45ajM/l5LL8oGWac1v57evXoIfnPW2LywQA5DfL0CtFPBqZCENq2Qrr0qrbVWb@u72oYaRfXjZrnDw "Fortran (GFortran) – Try It Online"