/**
 *    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;
}