/**
* author: orzvanh14 ( )
* created: 23.12.2022 10:08:02
* too lazy to update time
**/
// i wants to take ioi
//binhtinhtutinkhongcaycunhungmotkhikhongcontutinnualatuyetvong
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define nn "\n"
#define pi pair<int, int>
#define fi first
#define se second
#define lb lower_bound
#define ub upper_bound
#define eb emplace_back
#define pb push_back
#define TASK " "
#define ms(a, x) memset(a, x, sizeof(a))
#define all(a) a.begin(), a.end()
#define All(a, n) a + 1, a + 1 + n
#define LOG 19
const int INF = 1e18;
const int mod = 1e9 + 7;
const int N = 2e5 + 5;
int n;
int a[N];
struct node{
int len, cnt;
};
node st[4 * N];
vector<int> v;
void nhap(){
cin >> n;
for(int i = 1; i <= n; i++){
cin >> a[i];
v.pb(a[i]);
}
}
node merge(node a, node b){
if(a.len > b.len) return a;
if(a.len < b.len) return b;
if(a.len == 0) return {0, 0};
return {a.len, (a.cnt + b.cnt) % mod};
}
void update(int id, int l, int r, int i, node val){
if(l > i || r < i) return;
if(l == r){
if(val.len > st[id].len){
st[id] = val;
}
else if(val.len == st[id].len){
st[id].cnt += val.cnt;
st[id].cnt %= mod;
}
return;
}
int m = (l + r) / 2;
update(id * 2, l, m, i, val);
update(id * 2 + 1, m + 1, r, i, val);
st[id] = merge(st[id * 2], st[id * 2 + 1]);
}
node get(int id, int l, int r, int u, int v){
if(l > v || r < u) return {0, 0};
if(l >= u && r <= v){
return st[id];
}
int m = (l + r) / 2;
return merge(
get(id * 2, l, m, u, v),
get(id * 2 + 1, m + 1, r, u, v)
);
}
void solve(){
sort(all(v));
for(int i = 1; i <= n; i++){
int pos = lb(all(v), a[i]) - v.begin() + 1;
node best;
if(pos == 1){
best = {0, 0};
}
else{
best = get(1, 1, n, 1, pos - 1);
}
node cur;
cur.len = best.len + 1;
if(best.len == 0){
cur.cnt = 1;
}
else{
cur.cnt = best.cnt;
}
update(1, 1, n, pos, cur);
}
cout << st[1].cnt % mod;
}
signed main() {
// freopen("piggyback.in", "r", stdin);
// freopen("piggyback.out", "w", stdout);
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
nhap();
solve();
return 0;
}
LyoqCiAqICAgIGF1dGhvcjogIG9yenZhbmgxNCAoICApCiAqICAgIGNyZWF0ZWQ6IDIzLjEyLjIwMjIgMTA6MDg6MDIKICogICAgdG9vIGxhenkgdG8gdXBkYXRlIHRpbWUKKiovCi8vIGkgd2FudHMgdG8gdGFrZSBpb2kKLy9iaW5odGluaHR1dGlua2hvbmdjYXljdW5odW5nbW90a2hpa2hvbmdjb250dXRpbm51YWxhdHV5ZXR2b25nCiNpbmNsdWRlIDxiaXRzL3N0ZGMrKy5oPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCiNkZWZpbmUgaW50IGxvbmcgbG9uZwojZGVmaW5lIG5uICJcbiIKI2RlZmluZSBwaSBwYWlyPGludCwgaW50PgojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgc2Ugc2Vjb25kCiNkZWZpbmUgbGIgbG93ZXJfYm91bmQKI2RlZmluZSB1YiB1cHBlcl9ib3VuZAojZGVmaW5lIGViIGVtcGxhY2VfYmFjawojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIFRBU0sgIiAiCgojZGVmaW5lIG1zKGEsIHgpIG1lbXNldChhLCB4LCBzaXplb2YoYSkpCiNkZWZpbmUgYWxsKGEpIGEuYmVnaW4oKSwgYS5lbmQoKQojZGVmaW5lIEFsbChhLCBuKSBhICsgMSwgYSArIDEgKyBuCgojZGVmaW5lIExPRyAxOQoKY29uc3QgaW50IElORiA9IDFlMTg7CmNvbnN0IGludCBtb2QgPSAxZTkgKyA3Owpjb25zdCBpbnQgTiA9IDJlNSArIDU7CgppbnQgbjsKaW50IGFbTl07CgpzdHJ1Y3Qgbm9kZXsKCWludCBsZW4sIGNudDsKfTsKCm5vZGUgc3RbNCAqIE5dOwoKdmVjdG9yPGludD4gdjsKCnZvaWQgbmhhcCgpewoJY2luID4+IG47Cglmb3IoaW50IGkgPSAxOyBpIDw9IG47IGkrKyl7CgkJY2luID4+IGFbaV07CgkJdi5wYihhW2ldKTsKCX0KfQoKbm9kZSBtZXJnZShub2RlIGEsIG5vZGUgYil7CglpZihhLmxlbiA+IGIubGVuKSByZXR1cm4gYTsKCWlmKGEubGVuIDwgYi5sZW4pIHJldHVybiBiOwoKCWlmKGEubGVuID09IDApIHJldHVybiB7MCwgMH07CgoJcmV0dXJuIHthLmxlbiwgKGEuY250ICsgYi5jbnQpICUgbW9kfTsKfQoKdm9pZCB1cGRhdGUoaW50IGlkLCBpbnQgbCwgaW50IHIsIGludCBpLCBub2RlIHZhbCl7CglpZihsID4gaSB8fCByIDwgaSkgcmV0dXJuOwoKCWlmKGwgPT0gcil7CgkJaWYodmFsLmxlbiA+IHN0W2lkXS5sZW4pewoJCQlzdFtpZF0gPSB2YWw7CgkJfQoJCWVsc2UgaWYodmFsLmxlbiA9PSBzdFtpZF0ubGVuKXsKCQkJc3RbaWRdLmNudCArPSB2YWwuY250OwoJCQlzdFtpZF0uY250ICU9IG1vZDsKCQl9CgkJcmV0dXJuOwoJfQoKCWludCBtID0gKGwgKyByKSAvIDI7CgoJdXBkYXRlKGlkICogMiwgbCwgbSwgaSwgdmFsKTsKCXVwZGF0ZShpZCAqIDIgKyAxLCBtICsgMSwgciwgaSwgdmFsKTsKCglzdFtpZF0gPSBtZXJnZShzdFtpZCAqIDJdLCBzdFtpZCAqIDIgKyAxXSk7Cn0KCm5vZGUgZ2V0KGludCBpZCwgaW50IGwsIGludCByLCBpbnQgdSwgaW50IHYpewoJaWYobCA+IHYgfHwgciA8IHUpIHJldHVybiB7MCwgMH07CgoJaWYobCA+PSB1ICYmIHIgPD0gdil7CgkJcmV0dXJuIHN0W2lkXTsKCX0KCglpbnQgbSA9IChsICsgcikgLyAyOwoKCXJldHVybiBtZXJnZSgKCQlnZXQoaWQgKiAyLCBsLCBtLCB1LCB2KSwKCQlnZXQoaWQgKiAyICsgMSwgbSArIDEsIHIsIHUsIHYpCgkpOwp9Cgp2b2lkIHNvbHZlKCl7CgoJc29ydChhbGwodikpOwoKCWZvcihpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKXsKCgkJaW50IHBvcyA9IGxiKGFsbCh2KSwgYVtpXSkgLSB2LmJlZ2luKCkgKyAxOwoKCQlub2RlIGJlc3Q7CgoJCWlmKHBvcyA9PSAxKXsKCQkJYmVzdCA9IHswLCAwfTsKCQl9CgkJZWxzZXsKCQkJYmVzdCA9IGdldCgxLCAxLCBuLCAxLCBwb3MgLSAxKTsKCQl9CgoJCW5vZGUgY3VyOwoKCQljdXIubGVuID0gYmVzdC5sZW4gKyAxOwoKCQlpZihiZXN0LmxlbiA9PSAwKXsKCQkJY3VyLmNudCA9IDE7CgkJfQoJCWVsc2V7CgkJCWN1ci5jbnQgPSBiZXN0LmNudDsKCQl9CgoJCXVwZGF0ZSgxLCAxLCBuLCBwb3MsIGN1cik7Cgl9CgoJY291dCA8PCBzdFsxXS5jbnQgJSBtb2Q7Cn0KCnNpZ25lZCBtYWluKCkgewoJLy8gZnJlb3BlbigicGlnZ3liYWNrLmluIiwgInIiLCBzdGRpbik7CgkvLyBmcmVvcGVuKCJwaWdneWJhY2sub3V0IiwgInciLCBzdGRvdXQpOwoJaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsKCWNpbi50aWUoMCk7Cgljb3V0LnRpZSgwKTsKCgluaGFwKCk7Cglzb2x2ZSgpOwoKCXJldHVybiAwOwp9