#include "bits/stdc++.h" using namespace std; #define DEBUG(x) cout<<#x<<": "< #define vl vector #define vii vector< vector > #define vll vector< vector > #define vs vector #define pii pair #define pis pair #define psi pair #define pll pair const int inf = 1000000001; const ll INF = 1e18 * 2; #define MOD 1000000007 #define mod 1000000009 #define pi 3.14159265358979323846 #define Sp(p) cout<= mod ? a.n - a.Mod : a.n); } Modint operator-(Modint a, Modint b) { return Modint((a.n -= b.n) < 0 ? a.n + a.Mod : a.n); } Modint operator*(Modint a, Modint b) { return Modint(1LL * a.n * b.n % a.Mod); } Modint &operator+=(Modint &a, Modint b) { return a = a + b; } Modint &operator-=(Modint &a, Modint b) { return a = a - b; } Modint &operator*=(Modint &a, Modint b) { return a = a * b; } int main() { int n, k, i, j; cin >> n >> k; for (i = 0; i < n; i++) { cin >> j; } vector > dp(n + 1, vector(n*(n - 1) / 2 + 1)); vector > sum(n + 1, vector(n*(n - 1) / 2 + 2)); Modint one(1); Modint zero(0); dp[0][0] = one; sum[0][0] = zero; sum[0][1] = one; for (i = 0; i < n; i++) { for (j = 0; j <= (i + 1)*i / 2; j++) { dp[i + 1][j] = sum[i][min(j + 1, i*(i-1)/2 + 1)] - sum[i][max(j - i, 0)]; } sum[i][0] = zero; for (j = 0; j <= (i + 1)*i / 2; j++) { sum[i + 1][j + 1] = sum[i + 1][j] + dp[i + 1][j]; } } /* for (i = 0; i <= n; i++) { for (j = 0; j <= (i - 1)*i / 2; j++) { cout << dp[i][j].n << " "; } cout << endl; } for (i = 0; i <= n; i++) { for (j = 0; j <= (i - 1)*i / 2 + 1; j++) { cout << sum[i][j].n << " "; } cout << endl; } */ cout << sum[n][k + 1].n << endl; }