public boolean validate(T object) {
		Board board = new Board(object);

		// Move the space to the bottom right corner
		for (Square sq = board.squareOf(Board.EMPTY_SQUARE);;) {
			if (sq.x() < board.width() - 1) {
				sq = new Square(sq.x() + 1, sq.y());
			} else if (sq.y() < board.height() - 1) {
				sq = new Square(sq.x(), sq.y() + 1);
			} else {
				break;
			}
			board = board.slide(sq);
		}

		// Find the sequence of numbers on the non-empty squares
		int[] numbers = new int[board.width() * board.height()];
		for (int index = 0, y = 0; y < board.height(); y++) {
			for (int x = 0; x < board.width(); x++, index++) {
				numbers[index] = board.getValue(Square.valueOf(x, y));
			}
		}
		numbers[numbers.length - 1] = numbers.length;

		// Count inversions
		int invariants = countInversions(numbers);

		// The count of inversions must be even
		return invariants % 2 == 0;
	}