看比赛
题号:NC211598
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

牛牛很喜欢看别人打比赛,尤其是看ACM。

有一天牛牛在观看一场ACM,不知不觉中,封榜了。但是牛牛心里清楚,这封榜的最后一个小时,这场ACM的参赛者肯定不能再多做超过一道题了。

牛牛是个好奇的人,所以他想知道将他们的切题数排序(如果切题数相同,则编号小者在前,否则切题多越靠前),最多有多少种可能的排行榜(两个排行榜不同当且仅当他们在某一位置的选手编号不同)。

然而这场ACM的题目太多了,选手也太多了,所以他想要结果对998244353取模。

输入描述:

第一行一个 n 表示选手的数量

第二行 n 个数

a_i 表示封榜前编号 i 的选手切题数

输出描述:

一行答案
示例1

输入

复制
3
1 2 2

输出

复制
5

说明

编号序列分别为:
3 2 1
2 3 1
1 2 3
2 1 3
3 1 2

备注: