题目背景
Ryoku 并不知道这题的背景是什么。
题目描述
Ryoku 有一个正整数 {1,2,⋯,n} 的排列 A={ai}。
她告诉你一个序列 B={bi},表示对于每个数 ai,对于所有 j>i 有 bi 个数可以与 ai 组成逆序对(逆序对的定义是:满足 i>j 且 ai<aj 的一组 (ai,aj) 称作一对逆序对)。
不幸的是,Ryoku 给你的序列 B 有一些位置污损了,你想知道有多少个可能的排列 A 能符合条件。
请你输出答案并构造一个字典序最小的排列 A(对于排列 A={ai}, A′={ai′} 若存在某个位置 i,使得 ∀j<i,aj=aj′ 且 ai<ai′,则 A 的字典序小于 A′)。
输入格式
输入包含两行。
第一行包含一个整数 n。
第二行包含 n 个整数,为序列 B。若给出的 bi=−1,则代表这个位置被污损了。
输出格式
输出包含两行。
第一行包含一个整数,为可能的排列 A 的方案数,对 109+7 取模。
第二行包含 n 个整数,为字典序最小的符合条件的排列。若第一行答案为 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% 的数据,bi=−1。
对于另外 10% 的数据,n≤10。
对于另外 10% 的数据,bi=−1。
对于另外 30% 的数据,n≤103。
对于另外 30% 的数据,n≤105。
对于 100% 的数据,0<n≤106,−1≤bi≤n。