#2677. 简单的填数

简单的填数

题目描述

对于一个长度为n\red{n,}且下标从1\red{1}开始编号的序列a\red{a,}我们定义它是「合法的」,当且仅当它满足以下条件:

a1=1\red{a_1=1}

对于i\red{i∈}[1\red{[1,}n)\red{n),}ai\red{a_i≤}ai+1\red{a_i+1≤}ai+1\red{a_i+1}ai+\red{ai+}为正整数;

对于任意在a\red{a}中出现过的数v\red{v,}记它的出现次数为s\red{s,}2\red{2≤}s\red{s≤}5\red{5}

给定一个长度为n\red{n}的序列a\red{a,}其中有一些位置为0\red{0,}你需要在这些位置上任意填数,使得a\red{a}成为一个合法的序列,并且最大化an\red{a_n}的值。

输入格式

第一行一个数 n\red{n,}表示序列的长度。

第二行 n\red{n }个整数,第 i\red{i }个整数表示 ai\red{a_i,}如果 ai=0\red{a_i = 0,}则表示这个位置没有填数。

输出格式

如果不存在合法的填数方案,则输出 ?1\red{1}; 否则第一行输出一个整数,表示最大的 an\red{a_n}

第二行 n\red{n }个正整数,第 i\red{i }个数表示完 成填数后的序列的第 i\red{i }个元素。

如果有多组合法的解,输出任意一组

样例

输入样例1

7

0 1 0 0 0 3 0

输出样例1

3

1 1 2 2 3 3 3

输入样例2

4

0 0 0 3

输出样例2

-1

提示

数据范围

对于 30%\red{30\% }的数据,n\red{n ≤} 1000\red{1000}

对于另外 30%\red{30\% }的数据,数据保证随机生成;

对于 100%\red{100\% }的数据,2\red{2 ≤} n\red{n ≤} 2×\red{2 ×} 105,0\red{10^5 , 0 ≤} ai\red{ai ≤} 105\red{10^5}