#include #include #include #include #include #include using namespace std; #define x first #define y second #define NMAX 1000004 #define MOD 1000000007 int n, v[NMAX], f[NMAX]; int fact[NMAX], inv[NMAX]; int rid_log(int a, int b){ if(!b) return 1; int a2 = rid_log(a, b / 2); if(b&1) return (long long)a2 * a2 % MOD * a % MOD; return (long long)a2 * a2 % MOD; } inline int combinari(int n, int k){ return (long long)fact[n] * inv[k] % MOD * inv[n - k] % MOD; } int main (){ scanf("%d",&n); fact[0] = 1; for(int i = 1; i <= n; i++) fact[i] = ((long long)fact[i - 1] * i) % MOD; for(int i = 0; i <= n; i++) inv[i] = rid_log(fact[i], MOD - 2); int vmax = 0; for(int i = 1; i <= n; i++){ scanf("%d",&v[i]); f[v[i]]++; vmax = max(vmax, v[i]); } int ans = 1; for(int i = 1; i <= vmax; i++){ int ans2 = 0; for(int j = 0; j <= f[i]; j++){ int comb = combinari(f[i], j); ans2 += (long long) comb * comb % MOD; if(ans2 >= MOD) ans2 -= MOD; } ans = (long long)ans * ans2 % MOD; } ans--; if(ans < 0) ans += MOD; printf("%d\n", ans); return 0; }