Another approach to this is to recognize that your sequence of strings can form a one-to-one map with a sequence of integers. You could then use a single loop and a function to map those integers into your strings.
The trouble is that your task is enormous. You want to generate 36^15 strings. That is well over 2E+23 strings that will require in excess of 1,000,000 exabytes.
Forget the appearance of your code. You have problems if you want this to finish running this year or if you want to save these strings.