Ryoku 的逆序对

题目背景

Ryoku 并不知道这题的背景是什么。

题目描述

Ryoku 有一个正整数 $\{1,2,\cdots,n\}$ 的排列 $A = \{a_i\}$。 她告诉你一个序列 $B = \{b_i\}$,表示对于每个数 $a_i$,对于所有 $j>i$ 有 $b_i$ 个数可以与 $a_i$ 组成逆序对(逆序对的定义是:满足 $i>j$ 且 $a_i < a_j$ 的一组 $(a_i, a_j)$ 称作一对逆序对)。 不幸的是,Ryoku 给你的序列 $B$ 有一些位置污损了,你想知道有多少个可能的排列 $A$ 能符合条件。 请你输出答案并构造一个**字典序最小**的排列 $A$(对于排列 $A = \{a_i\},\ A' = \{a'_i\}$ 若存在某个位置 $i$,使得 $\forall j < i, a_j = a'_j$ 且 $a_i < a'_i$,则 $A$ 的字典序小于 $A'$)。

输入输出格式

输入格式


输入包含两行。 第一行包含一个整数 $n$。 第二行包含 $n$ 个整数,为序列 $B$。若给出的 $b_i = -1$,则代表这个位置被污损了。

输出格式


输出包含两行。 第一行包含一个整数,为可能的排列 $A$ 的方案数,对 $10^9 + 7$ 取模。 第二行包含 $n$ 个整数,为字典序最小的符合条件的排列。若第一行答案为 $0$,则第二行无需输出。

输入输出样例

输入样例 #1

5
0 3 0 0 0

输出样例 #1

1
1 5 2 3 4

输入样例 #2

5
0 3 -1 0 0

输出样例 #2

3
1 5 2 3 4

输入样例 #3

5
0 3 -1 0 1

输出样例 #3

0

说明

**【样例 1 说明】** 对于 $5$,存在逆序对 $(5,2),(5,3),(5,4)$ 共三对。 **【样例 2 说明】** 符合条件的排列有:$\{1, 5, 4, 2, 3\}, \{1, 5, 3, 2, 4\}, \{1, 5, 2, 3, 4\}$。共三种,其中字典序最小的为 $\{1, 5, 2, 3, 4\}$。 --- **【数据规模与约定】** 对于 $10\%$ 的数据,$b_i \neq -1$。 对于另外 $10\%$ 的数据,$n \le 10$。 对于另外 $10\%$ 的数据,$b_i = -1$。 对于另外 $30\%$ 的数据,$n \le 10^3$。 对于另外 $30\%$ 的数据,$n \le 10^5$。 对于 $100\%$ 的数据,$0< n \le 10^6$,$-1 \le b_i \le n$。