eolymp
bolt
Попробуйте наш новый интерфейс для отправки задач
Задачи

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

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

Рассмотрим множество, состоящее из первых \textbf{n} натуральных чисел: \textbf{N_n} = \{\textbf{1}, \textbf{2}, ..., \textbf{n}\}. \textit{Разбиение} - это представление этого множества в виде объединения одного или нескольких непустых множеств. Примерами разбиений для \textbf{n}=\textbf{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\} Всего существует \textbf{52} разбиения множества \textbf{N_5}. Заметим, что разбиения, отличающиеся только порядком объединяемых множеств, не различаются. Разбиения множества \textbf{N_n} можно упорядочить \textit{лексикографически}. \includegraphics{https://static.e-olymp.com/content/cc/cc8a15c4c87b4c7e92efe076a394dd47b084fd99.jpg} \includegraphics{https://static.e-olymp.com/content/cc/cc8a15c4c87b4c7e92efe076a394dd47b084fd99.jpg} Для того, чтобы определить этот порядок, вначале определим лексикографический порядок на подмножествах \textbf{N_n}. Будем говорить, что множество \textbf{A} \textbf{N_n} лексикографически меньше множества \textbf{B} \textbf{N_n} и писать \textbf{A} < \textbf{B}, если верно одно из следующих утверждений: \begin{itemize} \item найдется \textbf{i}, такое что \textbf{i} \includegraphics{https://static.e-olymp.com/content/a0/a01d6fe5baf86fd274dfc5600a30f76cc672dd3c.jpg} \textbf{A}, \textbf{i} \includegraphics{https://static.e-olymp.com/content/97/970fb3450de3b7b3d852f20e523df2d748f3f66c.jpg} \textbf{B}, для всех \textbf{j} < \textbf{i}: \textbf{j} \includegraphics{https://static.e-olymp.com/content/a0/a01d6fe5baf86fd274dfc5600a30f76cc672dd3c.jpg} \textbf{A} iff \textbf{j} \includegraphics{https://static.e-olymp.com/content/a0/a01d6fe5baf86fd274dfc5600a30f76cc672dd3c.jpg} \textbf{B}, и найдется \textbf{k} > \textbf{i}, такое что \textbf{k} \includegraphics{https://static.e-olymp.com/content/a0/a01d6fe5baf86fd274dfc5600a30f76cc672dd3c.jpg} \textbf{B}; \item \textbf{A} \includegraphics{https://static.e-olymp.com/content/cc/cc8a15c4c87b4c7e92efe076a394dd47b084fd99.jpg} \textbf{B} и \textbf{i} < \textbf{j} для всех \textbf{i} \includegraphics{https://static.e-olymp.com/content/a0/a01d6fe5baf86fd274dfc5600a30f76cc672dd3c.jpg} \textbf{A} и \textbf{j} \includegraphics{https://static.e-olymp.com/content/a0/a01d6fe5baf86fd274dfc5600a30f76cc672dd3c.jpg} \textbf{B} \ \textbf{A}. \end{itemize} Очевидно, что введенное отношение является полным порядком на подмножествах множества \textbf{N_n}. Теперь определим \textit{каноническое представление} разбиения, как представлние, в котором объединяемые множества упорядочены лексикографически. Разбиения упорядочиваются лексикографически следующим образом. Разбиение \textbf{N_n} = \textbf{A_1} U \textbf{A_2} U \textbf{...} U \textbf{A_k }лексикографически меньше разбиения \textbf{N_n} = \textbf{B_1} U \textbf{B_2} U \textbf{...} U \textbf{B_l}, если существует такое \textbf{i}, что \textbf{A_1} = \textbf{B_1}, \textbf{A_2} = \textbf{B_2}, ..., \textbf{A_\{i-1\}} = \textbf{B_\{i-1\}} и \textbf{A_i} < \textbf{B_i}. По разбиению множества \textbf{N_n} найдите следующее в лексикографическом порядке разбиение. \InputFile Входной файл содержит несколько описаний тестов. Каждое описание является каноническим представлением разбиения. Первая строка описания содержит \textbf{n} и \textbf{k} --- количество элементов в разбиваемом множестве и количество частей в разбиении (\textbf{1} ≤ \textbf{n} ≤ \textbf{200}). Последующие \textbf{k} строк содержат элементы разбиения. Элементы каждого множества упорядочены по возрастанию. Описания тестов отделены друг от друга пустыми строками. Последняя строка входного файла содержит два нуля. Этот тест не должен обрабатываться. Сумма \textbf{n} по всем описаниям не превосходит \textbf{2000}. \OutputFile Для каждого теста выведите следующее в лексикографическом порядке разбиение. Если разбиение во входном файле является последним в лексигорафическом порядке, выведите первое в лексикографическом порядке. Используйте тот же формат, что и во входном файле. Отделяйте разбиения друг от друга пустыми строками.
Лимит времени 1 секунда
Лимит использования памяти 64 MiB
Входные данные #1
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
Выходные данные #1
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