protected Puzzle(string name, string abbreviation, PuzzleDefinitionType definitionType, bool mustBeSquare, IEnumerable <int> validGridSizes, int defaultGridSize)
 {
     if (!validGridSizes.Contains(defaultGridSize))
     {
         throw new ArgumentException("The default grid size of a puzzle must be among its valid grid sizes.");
     }
     Name            = name;
     Abbreviation    = abbreviation;
     DefinitionType  = definitionType;
     MustBeSquare    = mustBeSquare;
     ValidGridSizes  = validGridSizes;
     DefaultGridSize = defaultGridSize;
     Entries         = new LinkedList <PuzzleEntry>();
     State           = PuzzleState.Uninitialized;
 }
 protected Sudoku(string name, string abbreviation, PuzzleDefinitionType definitionType) :
     base(name, abbreviation, definitionType, SizesSquares, 9)
 {
 }
 protected LatinSquare(string name, string abbreviation, PuzzleDefinitionType definitionType, IEnumerable <int> validGridSizes, int defaultGridSize) :
     base(name, abbreviation, definitionType, true, validGridSizes, defaultGridSize)
 {
 }