#include<bits/stdc++.h>
using namespace std;
#define ll long long int
#define endl '\n'
#define tc int t; cin>>t; while(t--)
#define shweta ios_base::sync_with_stdio(false); cin.tie(NULL);
#define fl for(int i=0;i<n;i++)
#define pb push_back
#define mp make_pair
#define F first
#define S second
#define MOD 1000000007
#define MAX_SIZE 100005
#define loop(i,a,b) for(int i=a;i<=b;i++)
#define looprev(i,b,a) for(int i=b;i>=a;i--)
#define inf 1e17
// char adj[1001][1001];
// int vis[1001][1001];
// vector<char> finalstring;
// bool bfound = false;
// int dx[] = {0, -1, 1, 0};
// int dy[] = {1, 0, 0, -1};
// string path = "RUDL";
// int N, M;
// int x1 = 0, y1 = 0;
// void bfs(int srcX, int srcY)
// {
//     queue<pair<int, int>> q;
//     q.push({srcX, srcY});
//     vis[srcX][srcY] = 1;
//     while (!q.empty())
//     {
//         int currX = q.front().first;
//         int currY = q.front().second;
//         vis[currX][currY]=1;
//         q.pop();
//         // cout<<currX<<" "<<currY<<endl;
//         for (int i = 0; i < 4; i++)
//         {   int newX = currX + dx[i];
//             int newY = currY + dy[i];
//             if (newX < 1 || newX > N || newY < 1 || newY > M)continue;
//             if (adj[newX][newY] == '#' || vis[newX][newY] == 1)continue;
//             if (adj[newX][newY] == '.')
//             {
//                 q.push({newX, newY});
//                 vis[newX][newY] = 1;
//             }
//             cout<<newX<<" "<<newY<<" "<<adj[newX][newY]<<" "<<vis[newX][newY]<<endl;
//             if (adj[newX][newY] == 'B')
//             {
//                 x1 = newX;
//                 y1 = newY;
//                 vis[newX][newY] = 1;
//                 bfound = true;
//                 break;
//             }
//         }
//         if(bfound)
//         { 
//             break;
//         }
//     }

// }
// signed main()
// {
//     cin >> N >> M;
//     int corax, coray;
//     for (int i = 1; i <= N; i++)
//     {
//         for (int j = 1; j <= M; j++)
//         {
//             cin >> adj[i][j];
//             if (adj[i][j] == 'A')
//             {
//                 corax = i;
//                 coray = j;
//             }
//         }
//     }
//     for (int i = 1; i <= N; i++)
//     {
//         for (int j = 1; j <= M; j++)
//         {
//             vis[i][j]=0;
//         }
//     }
//     bfs(corax, coray);
//     if (bfound == false)
//     {
//         cout << "NO\n";
//     }
//     else
//     {
//         while (1)
//         {
//             int a = x1;
//             int b = y1;
//             finalstring.pb(path[vis[x1][y1]]);
//             x1 = x1 - dx[vis[a][b]];
//             y1 = y1 - dy[vis[a][b]];
//             if (x1 == corax && y1 == coray)
//                 break;
//         }
//         cout << "YES\n" << finalstring.size() << endl;
//         // for(int i=finalstring.size()-1;i>=0;i)
//         reverse(finalstring.begin(), finalstring.end());
//         for (auto it : finalstring)
//         {
//             cout << it;
//         }
//     }
// }
signed main()
{
    ll n;
cin>>n;
// cout<<n<<endl;
map <ll,ll> ansh;
map <ll,ll> ::iterator itr;
for(ll i=0;i<n;i++){
    ll a;
    cin>>a;
    ansh[a]++;
}
ll ans=((n)*(n-1))/2;
// cout<<ans<<endl;
itr=ansh.begin();

while(itr!=ansh.end()){
    ans-=((itr->second)*(itr->second-1))/2;
    itr++;

}
cout<<ans<<endl;


}
#include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    
    ll n;
    cin>>n;
    ll arr[n];
    map<ll,ll> m;
    for(ll i =0 ;i<n;i++){
        cin>>arr[i];
        m[arr[i]]++;
    }
    ll ans = 0;
    for(ll i =0 ;i<n;i++){
        ans += (n-i-m[arr[i]]);
        if(m[arr[i]]>0)m[arr[i]]--;    
    }
    cout<<ans;
}