P0937

SPOJ PERIODNI

SPOJ PERIODNI

有一块由 NN 个从左到右相邻且底端对齐的竖直列组成的棋盘。第 ii 列包含 hih_i 个单位方格。第 ii 列从底部起第 yy 行的方格存在,当且仅当 1≤y≤hi1\le y\le h_i。

现在要在棋盘中恰好放置 KK 个车,且每个方格至多放置一个车。车只能沿棋盘中连续存在的方格横向或纵向攻击,不能越过不存在的方格。

等价地,位于 (i,y)(i,y) 和 (j,z)(j,z) 的两辆车互相攻击,当且仅当满足以下条件之一:

  • i=ji=j;
  • y=zy=z,并且对于 ii 与 jj 之间(含端点)的每一列 tt,均有 ht≥yh_t\ge y。

求有多少种放置方案,使任意两辆车都不互相攻击。两个方案不同,当且仅当至少有一个方格只在其中一个方案中放置了车。

答案对 109+710^9+7 取模。

输入格式

第一行包含两个正整数 NN 和 KK,分别表示棋盘的列数和需要放置的车数。

第二行包含 NN 个正整数 h1,h2,…,hNh_1,h_2,\ldots,h_N,表示棋盘中各列的高度。

输出格式

输出一个非负整数,表示满足条件的放置方案数对 109+710^9+7 取模后的结果。

样例输入

5 2
2 3 1 2 4

样例输出

43

数据范围

  • N≤500N\le 500;
  • K≤500K\le 500;
  • hi≤106h_i\le 10^6。

来源与许可

本题题面与测试数据整理自 SPOJ PERIODNI 与 BZOJ。

样例 1

输入

5 2
2 3 1 2 4

输出

43