#include #include #include using namespace std; const int MOD = 1000000007; const int VAL_MAX = 1000005; long long fact[VAL_MAX]; long long power(long long base, long long exp) { if(exp == 0) return 1; if(exp % 2 == 0) { long long x = power(base, exp / 2); return (x * x) % MOD; } return (1LL * base * power(base, exp - 1)) % MOD; } long long invers(long long x) { return power(x, MOD-2); } long long comb(int n, int k) { return (fact[n] * invers(fact[k] * fact[n-k])) % MOD; } long long patrat(long long x) { return (x * x) % MOD; } int main() { fact[0] = 1; for(int i = 1; i < VAL_MAX; ++i) fact[i] = fact[i-1] * i; int n, x; cin >> n; vector ap(VAL_MAX); for(int i = 1; i <= n; ++i) { cin >> x; ap[x]++; } long long rasp = 1; for(int i = 0; i < VAL_MAX; ++i) { if(ap[i] == 0) continue; long long x = 0; for(int j = 0; j <= ap[i]; ++j) x = (x + patrat(comb(ap[i], j))) % MOD; rasp = (rasp * x) % MOD; } rasp--; if(rasp < 0) rasp += MOD; cout << rasp; return 0; }