public Board UnmakeMove(Move move)
{
int row = (int)move.Row;
int column = (int)move.Column;
if (_BoardValues[column, row] == Values.None)
throw new ArgumentException();
_BoardValues[column, row] = Values.None;
int bit = ~((int)move.Value);
_RowValues[row] = (Values) ((int)_RowValues[row] & bit);
_ColumnValues[column] = (Values)((int)_ColumnValues[column] & bit);
_RegionValues[column / 3, row / 3] = (Values) ((int) _RegionValues[column / 3, row / 3] & bit);
_EmptySquaresCount++;
return this;
}