题目描述
给定一个长度为 N 的数列 A=(A1,…,AN)。A 的每个元素要么是 −1,要么是 1 到 N 之间的整数,并且 1 到 N 的每个整数在 A 中最多出现一次。
对于 1 到 N 的一个排列 P=(P1,…,PN),如果满足 Ai=−1⇒Pi=Ai,则称 P 为良好排列。请你求出所有良好排列的逆序数的平方和,并对 998244353 取模。
排列 P 的逆序数定义为满足 1≤i<j≤N 且 Pi>Pj 的整数对 (i,j) 的个数。
输入格式
输入从标准输入读入,格式如下:
N A1 A2 … AN
输出格式
输出答案。
样例 1
输入
4
3 -1 2 -1
输出
29
样例 2
输入
10
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1
输出
952235647
样例 3
输入
15
-1 -1 10 -1 -1 -1 2 -1 -1 3 -1 -1 -1 -1 1
输出
460544744
说明/提示
限制条件
- 1≤N≤3000
- 1≤Ai≤N 或 Ai=−1
- A 中 1,…,N 每个数最多出现一次
- 输入均为整数
样例解释 1
良好排列有 P=(3,1,2,4) 和 P=(3,4,2,1) 共 2 个,逆序数分别为 2 和 5。因此答案为 22+52=29。
样例解释 3
请对 998244353 取模后输出答案。
由 ChatGPT 4.1 翻译