Время

13:41:36
24 May 2012
Версия для печати

Разбиения множества

   Рассмотрим множество, состоящее из первых n натуральных чисел: Nn = {1, 2, ..., n}. Разбиение - это представление этого множества в виде объединения одного или нескольких непустых множеств. Примерами разбиений для n=5 являются:

{1, 2, 3, 4, 5} = {1, 2, 3} U {4, 5}

{1, 2, 3, 4, 5} = {1, 3, 5} U {2, 4}

{1, 2, 3, 4, 5} = {1, 2, 3, 4, 5}

{1, 2, 3, 4, 5} = {1} U {2} U {3} U {4} U {5}

   Всего существует 52 разбиения множества N5. Заметим, что разбиения, отличающиеся только порядком объединяемых множеств, не различаются.

   Разбиения множества Nn можно упорядочить лексикографически.

   Для того, чтобы определить этот порядок, вначале определим лексикографический порядок на подмножествах  Nn. Будем говорить, что множество A TM_podmn Nn лексикографически меньше множества B TM_podmn Nn и писать A < B, если верно одно из следующих утверждений: 

  • найдется i, такое что i TM_in A, i TM_not_in B, для всех j < i: j TM_in A iff j TM_in B, и найдется k > i, такое что k TM_in B;
  • A TM_podmn B и i < j для всех i TM_in A и j TM_in B \ A.

   Очевидно, что введенное отношение является полным порядком на подмножествах множества Nn. Теперь определим каноническое представление разбиения, как представлние, в котором объединяемые множества упорядочены лексикографически.

   Разбиения упорядочиваются лексикографически следующим образом. Разбиение Nn = A1 U A2 U ... U Ak лексикографически меньше разбиения Nn = B1 U B2 U ... U Bl, если существует такое i, что A1 = B1, A2 = B2, ..., Ai-1 = Bi-1 и Ai < Bi.

   По разбиению множества Nn найдите следующее в лексикографическом порядке разбиение.


Технические условия

   Входные данные

   Входной файл содержит несколько описаний тестов. Каждое описание является каноническим представлением разбиения.  Первая строка описания содержит n и k —  количество элементов в разбиваемом множестве и количество частей в разбиении (1 ≤ n200). Последующие k строк содержат элементы разбиения. Элементы каждого множества упорядочены по возрастанию.

   Описания тестов отделены друг от друга пустыми строками. Последняя строка входного файла содержит два нуля. Этот тест не должен обрабатываться.

   Сумма n по всем описаниям не превосходит 2000.

   Выходные данные

   Для каждого теста выведите следующее в лексикографическом порядке разбиение. Если разбиение во входном файле является последним в лексигорафическом порядке, выведите первое в лексикографическом порядке. Используйте тот же формат, что и во входном файле. Отделяйте разбиения друг от друга пустыми строками.


Информация о задаче

Лимит времени: 1 секунда
Лимит памяти: 64 MB
Баллы за пройденный тест: 5
Сложность: 57% 3/7
Классификация: Комбинаторика, Сортировки и последовательности

Пример

Пример входных данных

5 2
1 2 3
4 5

5 2
1 3 5
2 4

5 1
1 2 3 4 5

5 5
1
2
3
4
5

0 0

Пример выходных данных

5 2
1 2 3 4
5

5 4
1 4
2
3
5

5 2
1 2 3 5
4

5 4
1
2
3
4 5


← Рисунки на листочке в клеточку Список задач Tobo or not Tobo →