16. Архивирование

Не решаласьЛёгкая

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

  • Первый символ строки образует первый блок.
  • Выбирается наибольший префикс данных pp, который уже есть среди блоков.
  • Если pp достиг конца данных, то он является последним блоком.
  • Строка pp+cc, где cc — следующий символ, является следующим блоком.
  • Алгоритм переходит ко второму шагу и продолжает обрабатывать данные, начиная с первого символа, который не входит ни в один из блоков.

Например, строка данных 11001110011 будет разбита на блоки 1, 1+0=10, 0, 1+1=11, 10+0=100 и 11. А строка 1111111 будет разбита на блоки 1, 11, 111 и 1.

Формат ввода

В единственной строке дана непустая строка ss, состоящая из 00 и 11. Постройте ее разбиение на блоки. Длина строки ss не превосходит 10000001\,000\,000.

Формат вывода

В единственной строке выведите через пробел блоки, на которые разбивается строка ss.

Ограничения

Ограничение времени

5 с

Ограничение памяти

256 МБ

Пример 1

Ввод
11001110011
Вывод
1 10 0 11 100 11

Пример 2

Ввод
1111111
Вывод
1 11 111 1

Пример 3

Ввод
10101010111110000101010010
Вывод
1 0 10 101 01 11 110 00 010 1010 010

Пример 4

Ввод
000001111110000001111110000110
Вывод
0 00 001 1 11 110 000 0011 111 10 0001 10

Теги

Нужно войти, чтобы отправить решение.Войти