#iai30b1. 相等子序列

相等子序列

相等子序列

题目描述

给定一个序列 a1,a2,,ana_1,a_2,\cdots,a_n,请计算它有多少种不同的相等子序列。由于答案可能很大,输出方案数量模 1,000,000,0071,000,000,007 的余数。

子序列是指从原序列中去除部分数字组成的序列(且留下的数字应保持原序列的顺序),空集不算子序列,原序列本身算是自身的一种子序列。

两个子序列相等,是指他们的长度相同,且对应的每一个数字都相等。比如对于序列 1,2,1,2,31,2,1,2,3 来说,第一个 1,21,2 与 第二个 1,21,2 就是相等的子序列。

输入格式

第一行:单个整数 nn,代表序列长度

第二行:nn 个整数,代表 a1a_1ana_n

输出格式

单个整数:表示不相等子序列的数量模 109+710^9+7 的余数。

数据范围

  • 对于 30%30\% 的数据,保证 1n151 \leq n \leq 15
  • 对于 50%50\% 的数据,保证 1n1031 \leq n \leq 10^3
  • 对于 100%100\% 的数据,保证 1n1061 \leq n \leq 10^6
  • 1ai1061 \leq a_i \leq 10^6

样例输入 #1

4
1 2 3 2

样例输出 #1

13

知识点与难度

本题涉及的知识点从属于 GESP 6级,难度等级:⭐⭐⭐


测试点分布

Subtask 分值 测试点编号 说明
0 10 1~2 样例
1 20 3~8 小规模 N≤100 / 特殊: 全相同 / 特殊: 严格递增
2 15 9~11 Hack: N=1 / Hack: 大数取模 / Hack: 重复元素
3 30 12~20 中大规模 N≈10000~1000000 压力
4 25 21~25 随机 N=1~1000000 回归