#include #define mod 1000000007 using namespace std; typedef long long ll; ll t[1202][1202]; ll v[1202]; int n; ll solve(int atual, int k){ //cout << "NO SOLVE " << atual << " " << k << endl; if (atual == n) return 1; ll &ret = t[atual][k]; if (ret != -1) return ret; //cout << "COMECA PRA " << atual << endl; ll fat = k; ll mul = k; ret = 0; int ant = v[atual]; for (int i = 1; i <= k && atual + i <= n; i++){ if (i != 1 && v[atual + i - 1] < v[atual + i - 2]) break; ret = (ret + (fat * solve(atual + i, i)) % mod) % mod; // cout << "NO FOR " << atual << " " << i << " SOMA " << fat * solve(atual + i, i) << " " << fat << " " << solve(atual + i, i) << endl; mul--; fat *= mul; fat %= mod; } return ret; } int main() { /* Enter your code here. Read input from STDIN. Print output to STDOUT */ cin >> n; memset(t, -1, sizeof(t)); for (int i = 0; i < n; i++){ cin >> v[i]; } ll res = 0; for (int i = 1; i <= n; i++){ if (i != 1 && v[i - 1] < v[i - 2]) break; res = (res + solve(i, i)) % mod; //cout << i << " " << res << endl; } cout << res << endl; return 0; }