ソースコード
#include "iostream"
#include "climits"
#include "list"
#include "queue"
#include "stack"
#include "set"
#include "functional"
#include "algorithm"
#include "string"
#include "map"
#include "unordered_map"
#include "unordered_set"
#include "iomanip"
#include "cmath"
#include "random"
#include "bitset"
#include "cstdio"
using namespace std;
const long long int MOD = 1000000007;
const long double EPS = 1e-8;
long long int N, M, K, H, W, L, R;
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cin >> N;
vector<int>v(N);
for (int i = 0; i < N; i++)cin >> v[i];
sort(v.begin(), v.end());
long long int add = 1;
int bef = *v.begin();
map<int, long long int>m;
for (auto i : v) {
if (i != bef) {
if (bef == *v.begin()) {
add = m[bef];
}
else {
add += m[bef];
}
add %= MOD;
m[i] += add;
m[i] %= MOD;
bef = i;
}
else {
m[i] += add;
m[i] %= MOD;
}
}
long long int ans = 0;
for (auto i : m) {
ans += i.second;
ans %= MOD;
}
cout << ans << endl;
return 0;
}