https://rpython.pythonprogramminghelp.com/5-fool-proof-tactics-to-get-you-more-full-factorial/