Возможное решение состоит в том, чтобы думать о вашем числе, установленном как n кусков элемента, каждый кусок имеет длину m. Если вы случайным образом выберете для каждого блока по одному элементу из каждого списка, то вы никогда не попадете в тупик. Просто убедитесь, что первый элемент в каждом чанке (кроме первого чанка) будет иметь список, отличный от последнего элемента предыдущего чанка.
Вы также можете итеративно рандомизировать числа, всегда проверяя, выбираете ли вы из списка, отличного от предыдущего числа, но затем вы можете зайти в некоторые тупики.
Наконец, еще одно возможное решение состоит в том, чтобы последовательно рандомизировать число в каждой позиции, но только из тех, которые «могут быть помещены туда», то есть, если вы введете число, ни одно из ограничений не будет нарушено, то есть у вас будет хотя бы возможное решение.