#include <bits/stdc++.h>
using namespace std;
 
using ll = long long;
constexpr ll mod = 1e9 + 7;
#define endl '\n'

void Iter(int& im, vector<array<ll,3>>& M, set<int>& paid, set<int>& free) {
  int n = M.size();
  while (im < n) {
    if (paid.count(M[im][2])) {
      ++im;
      continue;
    }
    if (paid.size() + free.size() < M[im][0]) return;
    free.emplace(M[im++][2]);
  }
}
int main() {
  ios::sync_with_stdio(0); cin.tie(0);

  int TT = 1;
  cin >> TT;
  while (TT--) { 
    ll n;
    cin >> n;
    vector<array<ll,3>> A(n);
    for (int i = 0; i < n; ++i) {
      cin >> A[i][0] >> A[i][1];
      A[i][2] = i;
    }
    vector<array<ll,3>> M = A;
    vector<array<ll,3>> P = A;
    sort(P.begin(), P.end(), [](const auto& a, const auto& b) {
                               return a[1] < b[1];
                             });
    sort(M.begin(), M.end(), [](const auto& a, const auto& b) {
                               return a[0] < b[0] || (a[0]==b[0] && a[1] > b[1]);
                             });
    int im = 0;
    set<int> paid, free;
    multiset<array<ll,3>> paid_helper;

    Iter(im, M, paid, free);
    for (int i = 0; i < n; ++i) {
      if (free.count(P[i][2])) continue;
      paid.emplace(P[i][2]);
      paid_helper.insert({P[i][0], -P[i][1], P[i][2]});
//      dbg(paid.size(), paid_helper);
      while (paid.size() > (*paid_helper.begin())[0]) {
        free.emplace((*paid_helper.begin())[2]);
        paid.erase((*paid_helper.begin())[2]);
        paid_helper.erase(paid_helper.begin());
//        dbg("erase", paid_helper, paid);
      }

      Iter(im, M, paid, free);
    }
//    dbg(paid);
    
    ll ans = 0;
    for (int i = 0; i < n; ++i) {
      if (paid.count(i)) {
//        dbg(i,A[i][1]);
        ans += A[i][1];
      }
    }
    cout << ans << endl;
  }
}
