+ Added taboo list for each shape variant, so that equivalent shape placements will not occur
- Now solver.py will not work with arbitrary shapes, only the predefined set is available (which is not a problem for solving this particular puzzle)