#include using namespace std; typedef long long i64; const int mod = 1e9 + 7; const int nmax = 1e6; const int mmax = 1e5; int f[nmax + 1]; long long fact[mmax + 1], inv[mmax + 1]; long long lgput (long long b, int p) { long long ans = 1; while (p > 0) { if (p & 1) ans = ans * b % mod; p >>= 1; b = b * b % mod; } return ans; } inline long long C (int y, int x) { return fact[ x ] * inv[ y ] % mod * inv[x - y] % mod; } int main() { fact[ 0 ] = 1; for (int i = 1; i <= mmax; ++ i) { fact[ i ] = fact[i - 1] * i % mod; } for (int i = 0; i <= mmax; ++ i) { inv[ i ] = lgput(fact[ i ], mod - 2); } int n; cin >> n; for (int i = 1; i <= n; ++ i) { int x; cin >> x; ++ f[ x ]; } long long ans = 1; for (int i = 1; i <= nmax; ++ i) { long long sum = 0; for (int j = 0; j <= f[ i ]; ++ j) { sum += C(j, f[ i ]) * C(j, f[ i ]); sum %= mod; } ans = ans * sum % mod; } cout << (ans + mod - 1) % mod << "\n"; return 0; }