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

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

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

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

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

Формат ввода

В единственной строке дана непустая строка $s$, состоящая из $0$ и $1$. Постройте ее разбиение на блоки. Длина строки $s$ не превосходит $1\,000\,000$.

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

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

Ограничения

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

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

Теги

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