><>, 8989 86 + 3 = 9289 bytes
:&"$$"{\\l?!;o70.
}-1v!?:<{"}"
&:&\~"stodd"&&\~"stod"&:&?!~:
{1->:?!v}"\+1{1carfc"
rav\$$"\~"\+1=ihp
o;!?l<
Run with the -v
flag, e.g.
py -3 fish.py program.fish -v 3
Surprisingly ><> doesn't do too badly here, since we can mimic string multiplication by having a counter which we decrement every iteration.
:&"$$"{\ Put n into the register and push "$$"
}-1v!?:<{"}" Push n "}"s
&:&\~"stodd"&&\~"stod"&:&?!~: Push "stodd""stod", and popcopy the final "d" if n ==!= 0
{1->:?!v}"\+1{1carfc" Push n "\+1{1carfc"s
rav\$$"\~"\+1=ihp Push "\+1=ihprav\$$"
o;!?l< \l?!;o70. Keep printing chars until the stack is empty
(-3 bytes thanks to @randomra)