K. 无聊的猪宝宝

传统 1000 ms 256 MiB
标准 IO
文本比较

题目描述

无聊的猪宝宝有一个长度为 nn 的整数序列 a1,a2,,ana_1,a_2,\cdots,a_n

它想将其划分成若干段,设为 [l1,r1],[l2,r2],,[lm,rm][l_1,r_1],[l_2,r_2],\cdots,[l_m,r_m]mm 自行决定),满足:

  • l1=1l_1=1rm=nr_m=n。对于任意整数 i[1,m]i\in[1,m]liril_i\le r_i,若 imi\ne mri+1=li+1r_i+1=l_{i+1}
  • 以下两个条件中至少有一个成立:
    • 条件 A:对于任意整数 i[1,m]i\in[1,m],都有 aliali+1aria_{l_i}\le a_{l_i+1}\le\cdots\le a_{r_i}
    • 条件 B:对于任意整数 i[1,m]i\in[1,m],都有 aliali+1aria_{l_i}\ge a_{l_i+1}\ge\cdots\ge a_{r_i}

求满足上述要求的划分方案的个数。答案对 109+710^9+7 取模。

输入格式

第一行一个整数 nn1n1051\le n\le 10^5),表示序列的长度。

第二行 nn 个整数 a1,a2,,ana_1,a_2,\cdots,a_n1ai1091\le a_i\le10^9)。

输出格式

一行一个整数,表示答案对 109+710^9+7 取模后的结果。

样例

样例 1

输入

6
1 2 3 2 2 1

输出

14

解释

可以用两个集合的容斥原理来计算这个样例的答案。

a1,a2,,a6a_1,a_2,\cdots,a_6 划分成 mm 段,相当于从 55 个邻项之间的间隙中选 m1m-1 个插入隔板。

要使条件 A 成立,必须且只需在 a3a_3a4a_4 之间、a5a_5a6a_6 之间插入隔板,可得方案数为 23=82^3=8

要使条件 B 成立,必须且只需在 a1a_1a2a_2 之间、a2a_2a3a_3 之间插入隔板,可得方案数为 23=82^3=8

要使两者同时成立,同理可得方案数为 22

所以,答案是 8+82=148+8-2=14

样例 2

输入

12
1 1 2 3 2 2 1 9 1000000000 23 24 25

输出

284