- Описание
- Отправленные решения
16. Архивирование
В одном из алгоритмов сжатия используется следующая процедура разбиения данных на блоки:
- Первый символ строки образует первый блок.
- Выбирается наибольший префикс данных , который уже есть среди блоков.
- Если достиг конца данных, то он является последним блоком.
- Строка +, где — следующий символ, является следующим блоком.
- Алгоритм переходит ко второму шагу и продолжает обрабатывать данные, начиная с первого символа, который не входит ни в один из блоков.
Например, строка данных 11001110011
будет разбита на блоки 1
, 1+0=10
, 0
, 1+1=11
, 10+0=100
и 11
.
А строка 1111111
будет разбита на блоки 1
, 11
, 111
и 1
.
Формат ввода
В единственной строке дана непустая строка , состоящая из и . Постройте ее разбиение на блоки. Длина строки не превосходит .
Формат вывода
В единственной строке выведите через пробел блоки, на которые разбивается строка .
Ограничения
Ограничение времени
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