Прошло уже n дней как Поликарп работает в аналитическом отделе компании «Рога и Копыта». Теперь ему предстоит предоставить серию отчетов о работе компании за последние n дней. Известно, что основная информация в дневном отчете — это величина ai, прибыть компании в i-ый день. Если ai отрицательно — это означает, что компания понесла убытки в i-ый день.
Поликарп должен объединить дневные отчеты в папки. Каждая папка должна включать в себя данные по работе компании за несколько подряд идущих дней. Конечно, информация по каждому из n дней должна находиться ровно в одной папке. Таким образом, информацию по нескольким первым дням он объединяет в первую папку. Информацию по нескольким следующим дням — во вторую папку, и так далее.
Известно, что главный начальник читает по одной папке с дневными отчетами в день. Если в одной папке он найдет три или более отчета за дни, в которые компания понесла убытки (ai < 0), он выйдет из себя и гнев его будет страшен.
Поэтому Поликарп хочет подготовить папки так, чтобы никакая из них не содержала информацию по трем или более убыточным дням, а количество папок было минимально.
Напишите программу, которая по последовательности ai выведет минимальное количество папок.
В первой строке записано целое число n (1 ≤ n ≤ 100), n — количество дней. Вторая строка содержит последовательность целых чисел a1, a2, ..., an (|ai| ≤ 100), где ai обозначает прибыль компании в i-ый день. Допустимо, что дней с отрицательными ai может и не быть вообще.
Выведите целое число k — искомое минимальное количество папок. Во вторую строку выведите последовательность положительных целых чисел b1, b2, ..., bk, где bj — количество дневных отчетов в j-ой папке.
Если способов разбить отчеты по k дням несколько, выведите любой из них.
11
1 2 3 -4 -5 -6 5 -5 -6 -7 6
3
5 3 3
5
0 -1 100 -1 0
1
5
Способ разделить отчеты из первого примера на три папки:
Во втором примере все пять отчетов можно объединить в одну папку.
Название |
---|