小红打牌
题号:NC310831
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

\hspace{15pt}小红定义一个数组是「飞机」,当且仅当其中包含恰好 10 个元素,其中包含两组连续的三张相同牌与两组两张相同牌。(形式化的,在重排后能够变为形如 \{a,a,a,a+1,a+1,a+1,b,b,c,c\} 的数组就是一个「飞机」)如 \{1,1,1,2,2,2,3,3,4,4\}\{1,2,1,1,2,1,1,2,1,1\} 都是「飞机」,而 \{1,1,1,3,3,3,2,2,4,4\} 不是「飞机」。
\hspace{15pt}现在小红有 n 张牌,她想要打出一个「飞机」。请问他能打出多少种不同的「飞机」?由于结果可能很大,请将答案对 998244353 取模后输出。
\hspace{15pt}我们认为两个「飞机」不同,当且仅当两个「飞机」数组组成的可重集合不完全相同。

输入描述:

\hspace{15pt}第一行输入一个整数 n\left(1 \leqq n \leqq 2\times 10^5 \right)
\hspace{15pt}第二行输入 n 个整数 a_i\left(1 \leqq a_i \leqq 2\times 10^5 \right),代表每张牌上的数字。

输出描述:

\hspace{15pt}输出一个整数,代表答案对 998244353 取模后的值。
示例1

输入

复制
10
1 1 1 2 2 2 1 1 1 1

输出

复制
1
示例2

输入

复制
12
1 1 1 3 3 4 4 5 5 2 2 2

输出

复制
3

说明

三种「飞机」分别为