#include <bits/stdc++.h>
using namespace std;

using i64 = long long;

const i64 MOD = 1e9 + 7;
const int NMAX = 1e6 + 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;

    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; }