#include <bits/stdc++.h>
const int maxn = 2 * (1e5 + 2);
using namespace std;
int q, a, b, n;
vector<int> types;
vector<int> good;
vector<int> v;
vector<int> rozmiary[maxn + 10];
vector<int> ilosci;
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  types.resize(maxn + 10);
  good.resize(maxn + 10);
  cin >> q;
  while (q--) {
    cin >> n;
    for (int i = 0; i < n + 10; i++) {
      rozmiary[i].resize(0);
      good[i] = 0;
      types[i] = 0;
    }
    for (int i = 0; i < n; i++) {
      cin >> a >> b;
      if (!b) good[a]++;
      types[a]++;
    }
    v.resize(0);
    ilosci.resize(0);
    for (int i = 1; i <= n; i++) {
      if (types[i]) {
        v.push_back(types[i]);
        rozmiary[types[i]].push_back(types[i] - good[i]);
      }
    }
    sort(v.begin(), v.end());
    int last = maxn;
    int ans1 = 0;
    int ans2 = 0;
    for (int i = v.size() - 1; i >= 0; i--) {
      if (v[i] >= last) {
        last--;
        ans1 += last;
        ilosci.push_back(last);
      } else {
        ans1 += v[i];
        last = v[i];
        ilosci.push_back(v[i]);
      }
      if (last == 1) break;
    }
    priority_queue<int> kolejka;
    for (int i = 0; i < ilosci.size(); i++) {
      for (int j = 0; j < rozmiary[ilosci[i]].size(); j++)
        kolejka.push(rozmiary[ilosci[i]][j]);
      ans2 += min(kolejka.top(), ilosci[i]);
      kolejka.pop();
    }
    cout << ans1 << " " << ans2 << "\n";
  }
}
