/*
==> Don't stop when you're tired, stop when you're done.
--> @author: MIDORIYA_
*/
//*==============================================================
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef double db;
typedef long double ld;
typedef pair<int, int> pii;
typedef vector<int> vi;
typedef vector<ll> vll;
typedef vector<db> vd;
typedef vector<ld> vld;
typedef vector<bool> vb;
typedef vector<vector<ll>> vvl;
typedef vector<pii> vii;
typedef set<int> si;
typedef set<ll> sl;
#define pb push_back
#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()
#define Green true
#define Red false
#define endl '\n'
const ll mod = 1'000'000'007;
#define INF 2'000'000'000
#define time cerr << "Time Taken: " << (float)clock() / CLOCKS_PER_SEC << " Secs" << endl;
//*===================>>>Fast-IO-Functions<<<=================
void fastIO()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
}
//*===================>>>File-IO-Functions<<<=================
void fileIO()
{
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
freopen("out.txt", "w", stdout);
#endif
}
//*===================>>>ONE-FOR-ALL-Function<<<==============
ll nCr(ll n, ll r)
{
if (r > n)
return 0;
ll p = 1, k = 1;
if (n - r < r)
r = n - r;
if (n < 1)
return 0;
while (r)
{
p *= n, k *= r;
ll m = __gcd(p, k);
p /= m, k /= m, n--, r--;
}
return p;
}
void OneForAll()
{
int n;
cin >> n;
map<int, int> numOfLen;
for (int i = 0; i < n; i++)
{
int x;
cin >> x;
numOfLen[x]++;
}
ll res = 0;
ll sum = 0;
for(auto & it : numOfLen)
{
ll cnt = it.second;
if(cnt >= 3)
{
res += nCr(cnt, 3);
}
if(cnt >= 2)
{
res += nCr(cnt, 2) * sum;
}
sum += cnt;
}
cout << res << endl;
}
int main()
{
fastIO();
fileIO();
ll tc = 1;
cin >> tc;
while (tc--)
{
OneForAll();
}
time;
return 0;
}
LyoKPT0+IERvbid0IHN0b3Agd2hlbiB5b3UncmUgdGlyZWQsIHN0b3Agd2hlbiB5b3UncmUgZG9uZS4KLS0+IEBhdXRob3I6IE1JRE9SSVlBXwoqLwovLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdHlwZWRlZiBsb25nIGxvbmcgbGw7CnR5cGVkZWYgZG91YmxlIGRiOwp0eXBlZGVmIGxvbmcgZG91YmxlIGxkOwp0eXBlZGVmIHBhaXI8aW50LCBpbnQ+IHBpaTsKdHlwZWRlZiB2ZWN0b3I8aW50PiB2aTsKdHlwZWRlZiB2ZWN0b3I8bGw+IHZsbDsKdHlwZWRlZiB2ZWN0b3I8ZGI+IHZkOwp0eXBlZGVmIHZlY3RvcjxsZD4gdmxkOwp0eXBlZGVmIHZlY3Rvcjxib29sPiB2YjsKdHlwZWRlZiB2ZWN0b3I8dmVjdG9yPGxsPj4gdnZsOwp0eXBlZGVmIHZlY3RvcjxwaWk+IHZpaTsKdHlwZWRlZiBzZXQ8aW50PiBzaTsKdHlwZWRlZiBzZXQ8bGw+IHNsOwojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIGFsbCh4KSB4LmJlZ2luKCksIHguZW5kKCkKI2RlZmluZSByYWxsKHgpIHgucmJlZ2luKCksIHgucmVuZCgpCiNkZWZpbmUgR3JlZW4gdHJ1ZQojZGVmaW5lIFJlZCBmYWxzZQojZGVmaW5lIGVuZGwgJ1xuJwpjb25zdCBsbCBtb2QgPSAxJzAwMCcwMDAnMDA3OwojZGVmaW5lIElORiAyJzAwMCcwMDAnMDAwCiNkZWZpbmUgdGltZSBjZXJyIDw8ICJUaW1lIFRha2VuOiAiIDw8IChmbG9hdCljbG9jaygpIC8gQ0xPQ0tTX1BFUl9TRUMgPDwgIiBTZWNzIiA8PCBlbmRsOwovLyo9PT09PT09PT09PT09PT09PT09Pj4+RmFzdC1JTy1GdW5jdGlvbnM8PDw9PT09PT09PT09PT09PT09PQp2b2lkIGZhc3RJTygpCnsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZShudWxscHRyKTsKICAgIGNvdXQudGllKG51bGxwdHIpOwp9Ci8vKj09PT09PT09PT09PT09PT09PT0+Pj5GaWxlLUlPLUZ1bmN0aW9uczw8PD09PT09PT09PT09PT09PT09CnZvaWQgZmlsZUlPKCkKewojaWZuZGVmIE9OTElORV9KVURHRQogICAgZnJlb3BlbigiaW4udHh0IiwgInIiLCBzdGRpbik7CiAgICBmcmVvcGVuKCJvdXQudHh0IiwgInciLCBzdGRvdXQpOwojZW5kaWYKfQovLyo9PT09PT09PT09PT09PT09PT09Pj4+T05FLUZPUi1BTEwtRnVuY3Rpb248PDw9PT09PT09PT09PT09PQpsbCBuQ3IobGwgbiwgbGwgcikKewogICAgaWYgKHIgPiBuKQogICAgICAgIHJldHVybiAwOwogICAgbGwgcCA9IDEsIGsgPSAxOwogICAgaWYgKG4gLSByIDwgcikKICAgICAgICByID0gbiAtIHI7CiAgICBpZiAobiA8IDEpCiAgICAgICAgcmV0dXJuIDA7CiAgICB3aGlsZSAocikKICAgIHsKICAgICAgICBwICo9IG4sIGsgKj0gcjsKICAgICAgICBsbCBtID0gX19nY2QocCwgayk7CiAgICAgICAgcCAvPSBtLCBrIC89IG0sIG4tLSwgci0tOwogICAgfQogICAgcmV0dXJuIHA7Cn0KCnZvaWQgT25lRm9yQWxsKCkKewogICAgaW50IG47CiAgICBjaW4gPj4gbjsKCiAgICBtYXA8aW50LCBpbnQ+IG51bU9mTGVuOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCiAgICB7CiAgICAgICAgaW50IHg7CiAgICAgICAgY2luID4+IHg7CiAgICAgICAgbnVtT2ZMZW5beF0rKzsKICAgIH0KCiAgICBsbCByZXMgPSAwOwogICAgbGwgc3VtID0gMDsKICAgIGZvcihhdXRvICYgaXQgOiBudW1PZkxlbikKICAgIHsKICAgICAgICBsbCBjbnQgPSBpdC5zZWNvbmQ7CiAgICAgICAgaWYoY250ID49IDMpCiAgICAgICAgewogICAgICAgICAgICByZXMgKz0gbkNyKGNudCwgMyk7CiAgICAgICAgfQogICAgICAgIGlmKGNudCA+PSAyKQogICAgICAgIHsKICAgICAgICAgICAgcmVzICs9IG5DcihjbnQsIDIpICogc3VtOwogICAgICAgIH0KICAgICAgICBzdW0gKz0gY250OwogICAgfQoKICAgIGNvdXQgPDwgcmVzIDw8IGVuZGw7Cn0KCmludCBtYWluKCkKeyAKICAgIGZhc3RJTygpOwogICAgZmlsZUlPKCk7CgogICAgbGwgdGMgPSAxOwogICAgY2luID4+IHRjOwogICAgd2hpbGUgKHRjLS0pCiAgICB7CiAgICAgICAgT25lRm9yQWxsKCk7CiAgICB9CiAgICB0aW1lOwogICAgcmV0dXJuIDA7Cn0=