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

Задача . D. Декодирование числовых последовательностей


Поликарп разрабатывает метод передачи \(n\) числовых последовательностей по сети. Этот метод должен поддерживать передачу произвольного количества числовых последовательностей, последовательности могут иметь разные длины. Последовательности содержат произвольные неотрицательные целые числа.

Поликарп разработал следующий метод кодирования:

  • Будем считать, что последовательности пронумерованы от \(1\) до \(n\).
  • Допишем к каждой последовательности в конец специальный маркер окончания последовательности — элемент равный -1.
  • Результат кодирования — это одна новая последовательность, которая содержит в себе все элементы заданных \(n\) в специальном порядке: сначала добавим в результат кодирования все первые элементы последовательностей (в порядке от \(1\)-й до \(n\)-й), затем все вторые элементы (в порядке от \(1\)-й до \(n\)-й) и так далее, если у последовательности нет очередного элемента, то она просто пропускается. Процесс заканчивается, когда добавлены все элементы всех последовательностей.

Например, если требуется закодировать три последовательности \([3, 1, 4]\), \([2, 7]\) и \([1, 2, 3, 4]\), то последовательность действий будет такая:

  • модифицируем все три последовательности, добавив туда по -1: \([3, 1, 4, -1]\), \([2, 7, -1]\) и \([1, 2, 3, 4, -1]\);
  • выпишем все первые элементы, получим \([3, 2, 1]\);
  • затем выпишем все вторые элементы, получим \([3, 2, 1, 1, 7, 2]\);
  • затем выпишем все третьи элементы, получим \([3, 2, 1, 1, 7, 2, 4, -1, 3]\);
  • затем выпишем все четвёртые элементы, получим \([3, 2, 1, 1, 7, 2, 4, -1, 3, -1, 4]\) (обратите внимание, что вторая последовательность уже закончилась);
  • затем выпишем все пятые элементы, получим \([3, 2, 1, 1, 7, 2, 4, -1, 3, -1, 4, -1]\) (обратите внимание, что первая и вторая последовательности уже закончились);
  • теперь закончились все последовательности, и процесс кодирования завершается;
  • результат кодирования равен \([3, 2, 1, 1, 7, 2, 4, -1, 3, -1, 4, -1]\).

Ваша задача — реализовать декодирование по заданному результату кодирования.

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

В первой строке записано целое число \(m\) (\(1 \le m \le 3\cdot10^5\)) — длина результата кодирования. Далее во второй строке записан результат кодирования в виде последовательности целых чисел \(b_1, b_2, \dots, b_m\) (\(-1 \le b_i \le 100\)).

Гарантируется, что в последовательностях до кодирования были только неотрицательные целые числа от \(0\) до \(100\), что вам в самом деле задан результат корректного кодирования (иными словами, гарантируется, что ответ существует). Возможно, что одна или несколько последовательностей до кодирования были пусты.

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

Выведите \(n\), где \(n\) — количество закодированных последовательностей. Далее выведите \(n\) строк в формате \(k_i, a_{i1}, a_{i2}, \dots, a_{ik_i}\), где \(k_i\) — длина \(i\)-й последовательности, а \(a_{i1}, a_{i2}, \dots, a_{ik_i}\) — её элементы. Числа в строках разделяйте пробелами. Обратите внимание, что кодирование устроено таким образом, что ответ всегда определён однозначно.


Примеры
Входные данныеВыходные данные
1 12
3 2 1 1 7 2 4 -1 3 -1 4 -1
3
3 3 1 4
2 2 7
4 1 2 3 4
2 6
2 -1 2 -1 3 -1
3
1 2
0
2 2 3

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

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