func_code_string: #include <bits/stdc++.h>   using namespace std;   void c_p_c() {     ios_base::sync_with_stdio(0);     cin.tie(0);     cout.tie(0);   }   bool isPrime(long long n) {     if (n <= 1) return false;     if (n <= 3) return true;     if (n % 2 == 0 || n % 3 == 0) return false;     for (long long i = 5; i * i <= n; i += 6) {       if (n % i == 0 || n % (i + 2) == 0) return false;     }     return true;   }   vector<long long> Sieve(long long n) {     bool prime[n + 1];     memset(prime, true, sizeof(prime));     for (long long i = 2; i * i <= n; i++) {       if (prime[i]) {         for (long long j = i * i; j <= n; j += i) {           prime[j] = false;         }       }     }     vector<long long> primes;     for (long long i = 2; i <= n; i++) {       if (prime[i]) primes.push_back(i);     }     return primes;   }   map<long long, long long> primeFactors(long long n) {     map<long long, long long> factors;     while (n % 2 == 0) {       n /= 2;       factors[2]++;     }     for (long long i = 3; i <= sqrt(n); i += 2) {       while (n % i == 0) {         factors[i]++;         n /= i;       }     }     if (n > 2) factors[n]++;     return factors;   }   int32_t main() {     c_p_c();     long long t;     cin >> t;     while (t--) {       long long n;       cin >> n;       vector<long long> arr(n + 1, 0);       long long num;       for (long long i = 0; i < n; i++) {         cin >> num;         arr[num]++;       }       sort(arr.begin(), arr.end(), greater<long long>());       long long ans = arr[0], prev = arr[0];       for (long long i = 1; i <= n; i++) {         if (prev == 0) break;         if (arr[i] >= prev) {           ans += prev - 1;           prev--;         } else {           ans += arr[i];           prev = arr[i];         }       }       cout << ans <<   n ;     }   }   