#include #include #include #include #include #include #include #include #include // require sort next_permutation count __gcd reverse etc. #include // require abs exit atof atoi #include // require scanf printf #include #include // require accumulate #include // require fabs #include #include #include #include // require setw #include // require stringstream #include // require memset #include // require tolower, toupper #include // require freopen #include // require srand #define rep(i,n) for(int i=0;i<(n);i++) #define ALL(A) A.begin(), A.end() using namespace std; typedef long long ll; typedef pair P; const ll MOD = (ll)1e9 + 7LL; const int MAX_N = (int)1e5 + 5; ll fact[MAX_N], rfact[MAX_N]; ll extgcd (ll a, ll b, ll &x, ll &y ){ if (b == 0 ){x = 1LL; y = 0LL; return a; } ll g = extgcd (b, a%b, y, x ); y -= a/b*x; return g; } ll mod_inv (ll a, ll M ){ ll x, y; extgcd (a, M, x, y ); return (M+x%M)%M; } void init_mod (void ){ fact[0] = rfact[0] = 1LL; for (int i = 1; i < MAX_N; i++ ){ fact[i] = (fact[i-1]*(ll)i)%MOD; rfact[i] = (rfact[i-1]*mod_inv((ll)i,MOD))%MOD; } // end for } ll comb (int n, int k ){ return ((fact[n]*rfact[n-k])%MOD)*rfact[k]%MOD; } int main() { init_mod(); ios_base::sync_with_stdio(0); int N; cin >> N; map cnt; cnt.clear(); rep (i, N ){ int ain; cin >> ain; cnt[ain]++; } // end rep ll res = (ll)comb (N, 3 ); ll curr = 0LL; map::iterator it = cnt.begin(); for (; it != cnt.end(); it++ ){ int m = (*it).second; if (m >= 2 ){ curr = (curr + comb(m, 2 )*comb(N-m, 1 ) ) % MOD; curr = (curr + comb(m, 3 ) ) % MOD; } // end for } // end for res = (res - curr + MOD ) % MOD; cout << res << endl; return 0; }