Leonard的子序列
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 128 M,其他语言256 M
64bit IO Format: %lld

题目描述

Leonard 有一种特殊的子序列!
在这题中,Leonard 会给你一个长度为 n 的序列 a,这个序列中的所有数字都是非负整数。
子序列是由序列派生而成的,删除(或不删除)序列中的任意元素而不改变其余元素的顺序。
对于一个长度为 k 的子序列 b_1,b_2,  ,b_k(b_1 < b_2 <  < b_k),当且仅当满足                 的关系时,这个子序列就是一个 Leonard 的子序列。
请你求出序列 a 中所有 Leonard 的子序列的长度之和,对于两个子序列,当两子序列长度不相等时或存在任意一项下标不同时,视为两个不同的子序列。
你需要将答案对  取模!

输入描述:

第一行输入两个数字 n,表示给定的序列 a 的长度。
第二行 n 个数字,表示序列 a,其中第 i 个数字为 a_i

输出描述:

输出对  取模后的答案。
示例1

输入

复制
3
1 1 1

输出

复制
3
示例2

输入

复制
3
0 1 2

输出

复制
12