CCA的小球
题号:NC217043
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

给定 n 个小球,每个小球有颜色,要将它们摆成一行 。
两个方案不同,当且仅当存在某个位置,两种方案摆在这个位置的小球颜色不同。
一个方案合法, 当且仅当不存在任意两个位置相邻的小球颜色相同,求合法方案数对 10^9+7 取模后的值 。

输入描述:

第一行一个数 n 。
第二行 n 个数,分别表示 n 个小球的颜色 。

输出描述:

一个数,表示方案数对 10^9+7 取模后的值 。
示例1

输入

复制
5
2 1 3 3 5

输出

复制
36

备注:

n <= 10^6,0 < 颜色编号 < 2^31,每种颜色出现次数 <= 2