#include <bits/stdc++.h>

using namespace std;

const int kMod = 1e9 + 7;

namespace ModOps {
	int add(int a, int b) {
		a += b;
		if(a >= kMod) a -= kMod;
		return a;
	}
	int sub(int a, int b) {
		a -= b;
		if(a < 0) a += kMod;
		return a;
	}
	int mul(int a, int b) {
		return 1LL * a * b % kMod;
	}
	int lgpow(int b, int e) {
		int r = 1;
		while(e) {
			if(e % 2) 
				r = mul(r, b);
			b = mul(b, b);
			e /= 2;
		}
		return r;
	}
	int inv(int x) {
		return lgpow(x, kMod - 2);
	}
};
using namespace ModOps;

int Fact[1000005], IFact[1000005];

void Precomp() {
	Fact[0] = IFact[0] = 1;
	for(int i = 1; i <= 1000000; ++i) {
		Fact[i] = mul(Fact[i - 1], i);
	}
	IFact[1000000] = inv(Fact[1000000]);
	for(int i = 999999; i >= 1; --i) {
		IFact[i] = mul(IFact[i + 1], i + 1);
		assert(mul(IFact[i], Fact[i]) == 1);
	}
}

int GetComb(int n, int k) {
	return mul(mul(Fact[n], IFact[k]), IFact[n - k]);
}

int Cnt[1000005];

int main() {

	int n;
	cin >> n;

	for(int i = 0; i < n; ++i) {
		int x;
		cin >> x;
		Cnt[x] += 1;
	}

	Precomp();

	for(int i = 0; i <= 5; ++i) {
		for(int j = 0; j <= i; ++j)
			cerr << GetComb(i, j) << " ";
		cerr << endl;
	}

	int ans = 1;
	for(int i = 1; i <= 1000000; ++i) {
		int now = 0;
		for(int j = 0; j <= Cnt[i]; ++j) {
			int comb = GetComb(Cnt[i], j);
			now = add(now, mul(comb, comb));
		}
		ans = mul(ans, now);
	}

	cout << sub(ans, 1) << endl;

	return 0;
}