#include using namespace std; #define MAXN 100500 #define MAXV 1000500 #define MOD 1000000007 int N; int f[MAXV]; long long fastPow(long long a, int p) { long long ret = 1; while (p > 0) { if (p & 1) { ret = ret * a % MOD; } a = a * a % MOD; p >>= 1; } return ret; } int main() { // assert(freopen("buckets.in", "r", stdin)); // assert(freopen("buckets.out", "w", stdout)); cin.sync_with_stdio(false); int N; cin >> N; int x; for (int i = 0; i < N; i++) { cin >> x; f[x]++; } long long sum = 1; for (x = 0; x < MAXV; x++) { if (f[x] > 0) { long long prevSum = sum; sum = 0; long long comb = 1; for (int y = 0; y <= f[x]; y++) { sum += prevSum * comb % MOD * comb % MOD; sum %= MOD; comb = comb * (f[x] - y) % MOD; comb = comb * fastPow(y + 1, MOD - 2) % MOD; } } } sum += MOD - 1; sum %= MOD; cout << sum << endl; return 0; }