# [Fortran (GFortran)] `-cpp`, <s>409</s> 389 bytes ```lang-fortran #define t(n)write(x,'(i12)')n;x=adjustl(x) #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,2,-1;t(i);print*,q(x),b,q(w),", ",q(x),b,".";if(i<3)b=c t(i-1);print*,"Take one down, pass it around, ",q(x),q(b),q(w),"." print*;enddo;print*,"1",q(c),q(w),", 1",q(c),"." 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 few helper functions for string handling. Maybe one day Fortran will have stretchy strings but for now I have to use `trim()` everywhere. [Fortran (GFortran)]: https://gcc.gnu.org/fortran/ [TIO-lxkotvjd]: https://tio.run/##RY9NTsMwEIX3OcXILGqjSaUUCSkyWXMBLuC/tIbUTuypEjg8wVCarjzzZt77xn1MlFSoj/21WNcH63ofHBAPYk6eHF9wx31zEDsR5NIp@37JNPBFVLfViX8JSv5cnsqcVFKGXOLNs1Co0eCMS6U6BjoSDS5D7EE7l5jUnZJmG9z1uWgxAJ0czGoYWGUj@K5t8YB1I4l7IcfkAz3iVM4ojInPAhkCuwlsz6TvuX95ErozVbHUzWZib@qj0MrhNs4BYVQ5gydQKV6C3VImrsV/8p5VV690wdq4BTW/q0Zs/Ft/NyB7jUDx7y@ZYnKgggV9@YQczw7ORUFoW4bqjiqMdf02/aCOea3NOP4A "Fortran (GFortran) – Try It Online"