#include <iostream>

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