Робота з Парканом#10885

Робота з Парканом

1 секунда
256 мегабайтів
Складна

Фред Фермер хоче перепроєктувати паркан навколо свого дому. Паркан складається з вертикальних дерев'яних дощок різної висоти. Висота -тої дошки дорівнює h_i~(1 \le h_i \le n).

Щоб перепроєктувати паркан, Фред може неодноразово виконати наступну операцію будь-яку кількість разів (можливо разів):

Формально, після застосування операції до сегмента [l, r], висоти дошок у цьому сегменті стануть

h_i' = min(h_l, h_{l+1}, ..., h_r)~для~всіх~l \le i \le r

Скільки різних дизайнів паркану може отримати Фред, застосовуючи цю операцію кілька разів? Оскільки відповідь може бути великою, надрукуйте її за модулем 10^9 + 7.

Два дизайни паркану та вважаються різними, якщо існує хоча б одна дошка, висота якої відрізняється між та .

Вхідні дані

Перший рядок містить ціле число n~(1 \le n \le 3000), кількість дощок у паркані.

Другий рядок містить різних цілих чисел h_i~(1 \le h_i \le n, 1 \le i \le n), що представляють початкові висоти дощок.

Вихідні дані

Надрукуйте кількість різних дизайнів паркану, які можна отримати, за модулем 10^9 + 7.

Приклади

Приклад 1

Loading
Loading

Приклад 2

Loading
Loading

Приклад 3

Loading
Loading