import random


def ordered(parent1, parent2, point=None):
    """Return a new chromosome using ordered crossover (OX).

    This crossover method, also called order-based crossover, is suitable for
    permutation encoding. Ordered crossover respects the relative position of
    alleles.

    Args:
        parent1 (List): A parent chromosome.
        parent2 (List): A parent chromosome.
        points (int): The point at which to cross over.

    Returns:
        List[List]: Two new chromosomes descended from the given parents.
    """
    if point is None:
        point = random.randint(0, len(parent1) - 1)

    def fill(child, parent):
        for value in parent2:
            if value not in child:
                child.append(value)

    child1 = parent1[0:point]
    child2 = parent2[0:point]

    fill(child1, parent2)
    fill(child2, parent1)

    return [child1, child2]