【MX-X6-T5】再生

题目背景

> _このまま$\\$ らったった$\\$ 音に乗って$\\$ 今きっと世界で僕だけだ$\\$ 後ろ向きな歌を聴いて$\\$ 少しだけ$\\$ 前向きに生きていく_ > >_—— [再生 - Nanatsukaze](https://music.163.com/#/song?id=2133659925)_ 破碎的点依照破碎的规则进行重组,如此再生的一个结构将会是什么样的呢?

题目描述

现有一棵 $n$ 个点的有标号有根树,给定其长链剖分得到的 top 数组,请你输出有多少种不同的树可以在长链剖分之后得到该 top 数组。答案对 $20051131$(质数)取模。 具体来说,对于一棵树 $T$,对所有点 $u$ 定义其树高 $h_u$: - 如果 $u$ 是叶子,则 $h_u=1$。 - 否则设 $u$ 的孩子集合为 $S_u$,则 $h_u=\max\limits_{v\in S_u}h_v + 1$。 给定数组 $t_{1\cdots n}$,你需要计算有多少种树满足: - 对于根节点 $r$,满足 $t_r=r$。 - 对于每一个不是叶子的节点 $u$,存在恰好一个孩子 $v$ 满足 $h_v+1=h_u$ 并且 $t_v=t_u$,其他孩子满足 $t_v=v$。 模 $20051131$(质数)。 两棵树不同当且仅当它们的根不同或它们的边集不同。 **保证答案不为 $\bf 0$,但是不保证答案在模意义下不为 $\bf 0$。**

输入输出格式

输入格式


第一行一个正整数 $n$。 接下来一行,$n$ 个空格分隔的正整数 $t_{1\cdots n}$,表示 top 数组。

输出格式


一行一个整数表示答案对 $20051131$ 取模的值。

输入输出样例

输入样例 #1

5
1 1 1 4 4

输出样例 #1

2

输入样例 #2

16
1 2 1 4 1 4 1 4 9 1 1 12 1 1 12 1

输出样例 #2

7181107

说明

**【样例解释 #1】** ![](https://cdn.luogu.com.cn/upload/image_hosting/7np2ikvh.png) 仅有图中的两种树满足条件。 **【数据范围】** 对于所有数据,保证 $1\leq n\leq 5\times 10^5$,$1\leq t_i\leq i$,保证取模前答案不为 $0$。 **捆绑测试**,共 5 个 Subtask,具体限制如下所示: - Subtask 1(11 pts):$t_i=1$。 - Subtask 2(24 pts):$n\leq 5$。 - Subtask 3(17 pts):$n\leq 16$。 - Subtask 4(22 pts):$n\leq 2\times 10^3$。 - Subtask 5(26 pts):无特殊限制。