@Override
	protected int crossover(
		final MSeq<EnumGene<T>> that,
		final MSeq<EnumGene<T>> other
	) {
		if (that.length() != other.length()) {
			throw new IllegalArgumentException(
				"Required chromosomes with same length: %d != %d"
					.formatted(that.length(), other.length())
			);
		}

		if (that.length() >= 2) {
			final var random = RandomRegistry.random();
			final var positions = Subsets.next(
				random, that.length(), that.length()/2
			);

			final var removed1 = selectAt(positions, that);
			final var removed2 = selectAt(positions, other);

			final var reordered1 = reorder(removed1, other);
			final var reordered2 = reorder(removed2, that);

			exchange(positions, reordered1, that);
			exchange(positions, reordered2, other);

			return positions.length;
		} else {
			return 0;
		}
	}
Applies uniform order-based crossover to two sequences. A set of positions
is chosen, the genes at those positions are reordered as they occur in
the other sequence.

@param that first sequence
@param other second sequence
@throws IllegalArgumentException if the two input sequences have a
        different length
jenetics/src/main/java/io/jenetics/UniformOderBasedCrossover.java