#include using namespace std; using i64 = long long; const i64 MOD = 1e9 + 7; const int NMAX = 1e5 + 5; i64 fact[NMAX], inv[NMAX]; int f[NMAX]; i64 expow(i64 b, i64 e) { i64 ant = 1; for (i64 msk = 1; msk <= e; e>>= 1) { if (msk & e) ant = (ant * b) % MOD; b = (b * b) % MOD; } return ant;} i64 sq(i64 x) { return (x * x) % MOD; } i64 c(int n, int k) { return (fact[n] * inv[k] % MOD) * inv[n - k] % MOD; } int main() { freopen("dat.in", "r", stdin); ios::sync_with_stdio(false); cin.tie(0), cout.tie(0); i64 s, ssq, spr; int n, t, first; cin >> n; for (int i = 1; i <= n; ++i) { cin >> t; ++f[t]; } fact[0] = 1; for (int i = 1; i <= n; ++i) fact[i] = (fact[i - 1] * i) % MOD; inv[n] = expow(fact[n], MOD - 2); inv[0] = 1; for (int i = n - 1; i >= 1; --i) inv[i] = (inv[i + 1] * (i + 1)) % MOD; ssq = 1; for (int i = 1; i < NMAX; ++i) if (f[i]) { s = 0; for (int j = 0; j <= f[i]; ++j) s = (s + c(f[i], j) * c(f[i], j)) % MOD; ssq = (ssq * s) % MOD; } cout << (ssq + MOD - 1) % MOD << '\n'; return 0; }