F. Разбиение двоичной строки
ограничение по времени на тест
2 секунды
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Назовем строку $$$t$$$, состоящую из символов 0 и/или 1, красивой, если количество вхождений символа 0 в этой строке не превышает $$$k$$$, либо количество вхождений символов 1 в этой строке не превышает $$$k$$$ (либо выполняются оба условия). Например, если $$$k = 3$$$, строки 101010, 111, 0, 00000, 1111111000 являются красивыми, а строки 1111110000, 01010101 не являются красивыми.

Вам дана строка $$$s$$$. Вам необходимо разбить ее на минимально возможное количество красивых строк, т. е. найти последовательность строк $$$t_1, t_2, \dots, t_m$$$ такую, что все $$$t_i$$$ были красивыми, $$$t_1 + t_2 + \dots + t_m = s$$$ (где $$$+$$$ — оператор конкатенации), а $$$m$$$ минимально возможно.

Для каждого $$$k$$$ от $$$1$$$ до $$$|s|$$$ найдите минимально возможное количество строк на которое можно разбить заданную строку $$$s$$$ (т. е. минимально возможное $$$m$$$ в разбиении).

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

Единственная строка содержит одну строку $$$s$$$ ($$$1 \le |s| \le 2 \cdot 10^5$$$). Каждый символ $$$s$$$ является либо 0, либо 1.

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

Выведите $$$|s|$$$ целых чисел. $$$i$$$-е целое число должно быть равно минимальному количеству строк в разбиении $$$s$$$, когда $$$k = i$$$.

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