CF370E Summer Reading
题目描述
放暑假时,Vasya 收到了一份令人印象深刻的暑期阅读书单。与其他现代学生不同,Vasya 喜欢阅读,所以他在暑假期间每天都读书。
在阅读的同时,Vasya 还在“读者日记”中做了记录,每天记录下所读书的编号。书单上的书从 $1$ 开始编号,Vasya 也按照这个顺序依次阅读。他从不在没读完前一本书之前开始读新书。不幸的是,Vasya 做记录的时候并不是很准确,有几天他忘记写下自己看的书的编号,于是这些天的日记是空白的。
Vasya 知道语文老师会检查他的读书日记,所以他需要补全丢失的记录。请你帮他填满所有空白。Vasya 确信自己每本书至少读 $2$ 天,至多读 $5$ 天。Vasya 已经把自己开始的所有书都读完了。假设阅读清单里有足够多的书,多到不可能在一个暑假里读完的程度。如果有多种有效的补全方式,Vasya 希望结果中显示阅读的书的总数尽量多。
输入格式
第一行包含一个整数 $n$,表示暑假天数($2 \leq n \leq 2 \cdot 10^5$)。第二行包含 $n$ 个整数 $a_1, a_2, \ldots, a_n$,表示日记中当天的记录($0 \leq a_i \leq 10^5$)。如果第 $i$ 天 Vasya 忘记写书的编号,$a_i$ 为 $0$。
输出格式
如果无法正确地补全日记(即日记中原本就有错误),输出 $-1$。
否则,第一行输出 Vasya 最多能读多少本书。第二行输出 $n$ 个整数,表示正确补全后的日记记录。若有多种最优方案,可以输出其中任意一种。
说明/提示
由 ChatGPT 5 翻译