Олимпиадный тренинг

Задача . D. Параллельное программирование


У Поликарпа есть компьютер с n процессорами. Также в его компьютере есть n ячеек памяти. Будем считать, что процессоры пронумерованы целыми числами от 1 до n и что ячейки памяти последовательно пронумерованы целыми числами от 1 до n.

Поликарпу нужно разработать модель параллельной программы, которая для каждой ячейки памяти с номером i записывает в эту ячейку значение n - i. Другими словами, для каждой ячейки требуется найти расстояние до ячейки n.

Обозначим, записанное в i-той ячейке значение как ai. Изначально, ai = 1 (1 ≤ i < n) и an = 0. Будем считать, что в ячейку памяти номер i может записывать значения только лишь процессор i. Читать значение ячейки может любой процессор (несколько разных процессоров могут читать значение из ячейки одновременно).

Исполнение параллельной программы происходит в несколько шагов. На каждом шаге происходит выполнение параллельной версии операции инкремента. Выполнение параллельной операции инкремента происходит следующим образом:

  1. Каждый процессор независимо от других выбирает некоторую ячейку памяти. Пусть процессор i выбрал ячейку с номером ci (1 ≤ ci ≤ n).
  2. Все процессоры одновременно выполняют операцию, ai = ai + aci.

Помогите Поликарпу разработать модель параллельной программы, которая выполняется ровно в k шагов. Вычислите, какие операции нужно выполнить, чтобы после ровно k шагов для всех i значение ai было равно n - i.

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

В первой строке записаны через пробел два целых числа n и k (1 ≤ n ≤ 104, 1 ≤ k ≤ 20).

Гарантируется, что при заданных n и k требуемая последовательность операций существует.

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

Выведите ровно n·k целых чисел в k строках. В первой строке выведите номера c1, c2, ..., cn (1 ≤ ci ≤ n) для первой операции инкремента. Во второй — выведите номера для второй операции инкремента. В k-ой — выведите номера для k-ой операции инкремента.

В результате выведенных операций для любого i значение ai должно быть равно n - i.


Примеры
Входные данныеВыходные данные
1 1 1
1
2 3 2
2 3 3
3 3 3

time 2000 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
 Кол-во
С++ Mingw-w645
Комментарий учителя