luogu#P11281. 「GFOI Round 2」Aob & Blice

「GFOI Round 2」Aob & Blice

题目背景

English statement. You must submit your code at the Chinese version of the statement.

题目描述

Aob 和 Blice 在玩游戏。

现在有一个长为 nn 的排列 pp,且 Aob 和 Blice 手里分别有一个初始为空的不可重集合 SA,SBS_A,S_B。定义一轮游戏过程如下:

  • 首先 Aob 会随机选取两个满足 1x<yn1 \leq x < y \leq npx>pyp_x>p_y 的数 x,yx,y ,然后从 (x,y)(x,y)(px,py)(p_x,p_y) 这两个有序二元组随机选取一个放入自己的集合 SAS_A 中。

  • 在这之后,Blice 会从 (y,x)(y,x)(py,px)(p_y,p_x) 中选择一个放入自己的集合 SBS_B 中。注意这里的 x,yx,y 均为上一步中 Aob 选择的

在无限轮游戏之后 ^{\dagger},Aob 和 Blice 会比较他们手里的集合。虽然 Aob 只会随机,Blice 看起来更聪明些,但是 Blice 想要最终他们两个的集合完全相等,这样平局就不会有任何一个人伤心啦!

不幸的是,这个排列中的某些数消失了,于是 Blice 找到了你,想知道有多少种可能的原排列,使得他们两个人能够在无限轮后达成平局。为了方便,你只需要求出答案对 998244353998244353 取模的值。

^{\dagger} 在“无限轮”之后 Blice 能达到平局,定义为对于任意 ε>0\varepsilon>0,存在一个正整数 NN,使得对于任意 n>Nn>N,Blice 存在一种策略使得他在 nn 轮结束之后平局的概率 <ε<\varepsilon

输入格式

第一行包含一个正整数 nn

第二行包含 nn 个整数 pip_i。对于每个 ii,若 pi=0p_i=0,则表示第 ii 位上的数消失了;否则表示原排列中第 ii 位上的数。

输出格式

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

3
0 2 0
2
7
0 3 2 0 5 7 0
2

提示

【样例解释 #1】

两种排列都是合法的:{1,2,3},{3,2,1}\{1,2,3\},\{3,2,1\}

【数据范围】

本题采用捆绑测试。

子任务编号 nn \leq 特殊性质 分值
1 99 2020
2 20002000 A 1515
3 1010
4 10610^6 A 1515
5 B 1010
6 3030
  • 特殊性质 A:pi0p_i \ne 0
  • 特殊性质 B:pi=0p_i = 0

对于所有数据,满足:

  • 1n1061 \le n \le 10^6
  • 0pin0 \le p_i \le n
  • 对于任意 1i<jn1 \le i < j \le n,若 pi0p_i \ne 0pj0p_j \ne 0,则 pipjp_i \ne p_j