#include <bits/stdc++.h>
#include <bitset>
#include <algorithm>
#define int long long
using namespace std;
#define mod 998244353
#define FAST                          \
    ios_base::sync_with_stdio(false); \
    cin.tie(NULL);
bool vis[3000005], vis1[3000005];
vector<int> vec[3000005], v1, vec1[3000005];
int child[2000005];
int divi[2000005];

// int dis[100005] = {0};
int h[100005];
int p[100005];
int dp[100005][100];
bool f = 0;
int bad[100005], good[100005];
int p5[100005];
void dfs(int node)
{
    vis[node] = 1;
    for (int i = 0; i < vec[node].size(); i++)
    {
        int t_good = 0, t_bad = 0;
        if (!vis[vec[node][i]])

            dfs(vec[node][i]);
    }
}

// int ans[200005];

// void fun(int a, int b, int c)
// {
//     //ll val = 1;

//     while (a <= b)
//     {
//         ans[a] += c;
//         int p = -a;
//         a += (a & p);
//     }
// }
// int find1(int a)
// {
//     int sum = 0;
//     while (a != 0)
//     {
//         sum += ans[a];
//         int p = -a;
//         a -= (a & p);
//     }
//     return sum;
// }

// int fastexpo(int a, int b)
// {
//     int ans = 1;
//     while (b)
//     {
//         if (b & 1)
//             ans = (ans * a) % mod;
//         b = b / 2;
//         a = (a * a) % mod;
//     }
//     return ans % mod;
// }

// struct fun1
// {
//     string s1;
//     fun1(string s1)
//         : s1(s1)
//     {
//     }
// };
// struct cmp
// {
//     bool operator()(const fun1 &a, const fun1 &b) const
//     {
//         string lena = a.s1 + b.s1;
//         string lenb = b.s1 + a.s1;
//         if (lena == lenb)
//             return a.s1 > b.s1;
//         return lena < lenb;
//     }
// };
// class MyClass
// {
//     int a;
//     void co()
//     {
//         cout << a << "\n";
//     }
//     //run();
// };
vector<int> prime;
void run()
{
    int j = 1;
    for (int i = 2; i < 100001; i++)
    {
        if (!vis1[i])
            while (i * j < 100001)
            {
                vis1[i * j] = 1;
                divi[i * j] = i;
                j++;
            }
        j = 1;
    }
    for (int i = 2; i < 100001; i++)
    {
        // cout << i << " " << divi[i] << "\n";
        if (i == divi[i])
            prime.push_back(i);
    }
    // for (int i = 1; i < 1000001; i++)
    // {
    //     map<int, int> mp;
    //     int p = i;
    //     while (p > 1)
    //     {
    //         mp[divi[p]]++;
    //         p /= divi[p];
    //     }
    //     for (auto itr : mp)
    //     {
    //         v2[i].push_back({itr.first, itr.second});
    //     }
    // }
}
// string getString(char x)
// {
//     string s(1, x);

//     return s;
// }
// struct stru
// {
//     int n;
//     int t;
//     struct stru *node;
//     /* data */
// } p1;

int dup[2000005];
int pre[2000005];
int dis(int x1, int y1, int x2, int y2)
{
    return (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2);
}
int32_t main()
{
    int n;
    cin >> n;
    int arr[n];
    for (int i = 0; i < n; i++)
        cin >> arr[i];
    sort(arr, arr + n);
    int ans = 0;
    for (int i = 0; i < n; i++)
    {
        for (int j = i + 1; j < n; j++)
        {

            for (int k = j + 1; k < n; k++)
            {
                if (arr[i] != arr[j] && arr[j] != arr[k])
                {
                    if (arr[i] + arr[j] > arr[k])
                        ans++;
                }
            }
        }
    }
    cout << ans << "\n";
    return 0;
}

Measured memory_bytes: 144272