With no pruning it would be: 15^11 + 15^10 + .... + 15^2 + 15 = 9,267,595,563,615
I added in just 1 check and that is to ignore using the same mutagen twice in a row, reducing the branching to 14 instead of 15 nodes. So not quite that many, but still a lot: 14^11 + 14^10 + ... +14^2 + 15 = 4,361,070,182,715
It took 3 hours 44 minutes to run on an i7700k @ 4.8 GHZ. No multi-threading or anything fancy. In fact task manager showed it was only using 15% of 1 core.
Seeing there were 20 different elements to the mutagens I encoded them as bit positions in an unsigned long. This way each mutagen is represented as 2 numbers. Mutagen.positive has a 1 in each bit position for what it adds, while Mutagen.negative has a 1 in each position for what it removes.
Adding a mutagen to the current batch, which is also just a single unsigned long, involves just 3 bit-wise operations:
NewBatch = (Current OR Mutagen.positive) XOR (Current AND Mutagen.negative)
Now this value is just compared with the solution, which is also just an unsigned long.