P11281 「GFOI Round 2」Aob & Blice

题目描述

Aob 和 Blice 在玩游戏。 现在有一个长为 $n$ 的排列 $p$,且 Aob 和 Blice 手里分别有一个初始为空的**不可重**集合 $S_A,S_B$。定义一轮游戏过程如下: - 首先 Aob 会**随机**选取两个满足 $1 \leq x < y \leq n$ 且 $p_x>p_y$ 的数 $x,y$ ,然后从 $(x,y)$ 和 $(p_x,p_y)$ 这两个**有序二元组**中**随机选取一个**放入自己的集合 $S_A$ 中。 - 在这之后,Blice 会从 $(y,x)$ 和 $(p_y,p_x)$ 中选择一个放入自己的集合 $S_B$ 中。**注意这里的 $x,y$ 均为上一步中 Aob 选择的**。 在无限轮游戏之后 $^{\dagger}$,Aob 和 Blice 会比较他们手里的集合。虽然 Aob 只会随机,Blice 看起来更聪明些,但是 Blice 想要最终他们两个的集合完全相等,这样平局就不会有任何一个人伤心啦! 不幸的是,这个排列中的某些数消失了,于是 Blice 找到了你,想知道有多少种可能的原排列,使得他们两个人能够在无限轮后达成平局。为了方便,你只需要求出答案对 $998244353$ 取模的值。 $^{\dagger}$ 在“无限轮”之后 Blice 能达到平局,定义为对于任意 $\varepsilon>0$,存在一个正整数 $N$,使得对于任意 $n>N$,Blice 存在一种策略使得他在 $n$ 轮结束之后**不**平局的概率 $

输入格式

第一行包含一个正整数 $n$。 第二行包含 $n$ 个整数 $p_i$。对于每个 $i$,若 $p_i=0$,则表示第 $i$ 位上的数消失了;否则表示原排列中第 $i$ 位上的数。

输出格式

输出一行一个整数,表示答案对 $998244353$ 取模的值。

说明/提示

#### 【样例解释 #1】 两种排列都是合法的:$\{1,2,3\},\{3,2,1\}$。 #### 【数据范围】 **本题采用捆绑测试。** | 子任务编号 | $n \leq$ | 特殊性质 | 分值 | | :----------: | :----------: | :----------: | :----------: | | 1 | $9$ | 无 | $20$ | | 2 | $2000$ | A | $15$ | | 3 | $2000$ | 无 | $10$ | | 4 | $10^6$ | A | $15$ | | 5 | $10^6$ | B | $10$ | | 6 | $10^6$ | 无 | $30$ | - 特殊性质 A:$p_i \ne 0$。 - 特殊性质 B:$p_i = 0$。 对于所有数据,满足: - $1 \le n \le 10^6$; - $0 \le p_i \le n$; - 对于任意 $1 \le i < j \le n$,若 $p_i \ne 0$ 且 $p_j \ne 0$,则 $p_i \ne p_j$。