#include using namespace std; using ll = long long; using ld = long double; #define mod99 998244353 #define mod107 1000000007 #define endl "\n" #define rep(i,n) for (ll i = 0; i < (ll)(n); ++i) #define prep(i,a,n) for (ll i = a; i < n; ++i) #define all(a) a.begin(),a.end() #define rall(a) a.rbegin(), a.rend() #define si(x) ((long long)(x).size()) #define yn(bool) if(bool){cout<<"Yes"< inline T gcd(T a,T b) {return (b==0)?a:gcd(b,a%b);} template inline T lcm(T a, T b) {return a/gcd(a,b)*b;} #define sq(x) ((x)*(x)) #define cube(x) ((x)*(x)*(x)) //const ld PI=3.141592653589793238462643383279; const ll INF=5000000000000000000LL; string ABC = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; string abc = "abcdefghijklmnopqrstuvwxyz"; #define next_p next_permutation template ll LB(vector &v,T a){return lower_bound(v.begin(),v.end(),a)-v.begin();} template ll UB(vector &v,T a){return upper_bound(v.begin(),v.end(),a)-v.begin();} #define ull unsigned long long #define u_map unordered_map #define setting(x) sort(x.begin(),x.end());x.erase(unique(x.begin(),x.end()),x.end()) template using vc = vector; using vcc = vector; template using vv = vc>; using vvc = vv; using vi = vc; using vvi = vv; using vvvi = vv; using vl = vc; using vvl = vv; using vvvl = vv; using vb = vc; using vvb = vv; using vvvb = vv; using vs = vc; using vvs = vv; using pii = pair; using pll = pair; using vpii = vc; using vpll = vc; using vvpii = vv; using vvpll = vv; using vld = vc; using vvld = vv; using vvvld = vv; //#include //using namespace boost::multiprecision; //#include //using namespace atcoder; //using mint=modint998244353; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); ll n;cin >> n; vl a(n),b,c; rep(i,n) cin >> a[i]; sort(all(a)); b.push_back(a[0]); c.push_back(1); prep(i,1,n) { if(a[i-1]==a[i]) c[si(c)-1]++; else { b.push_back(a[i]); c.push_back(1); } } ll ans=0; rep(i,si(b)) prep(j,i+1,si(b)) prep(k,j+1,si(b)) { ans+=c[i]*c[j]*c[k]; } cout<