#include<bits/stdc++.h>
#define endl '\n'
using namespace std;
using ll = long long;
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
template <typename T> using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
// *st.find_by_order(k): K-th element in a set (counting from zero).
// st.order_of_key(k): Number of items strictly smaller than k. (same as lower_bound of k)
// less_equal<T> => for ordered_multiset or, ordered_multimap
void solve() {
int n;
cin >> n;
map<int, vector<pair<int, int>>> mp; // {r, {{l, pos}};
for(int i = 1; i <= n; i++) {
int l, r;
cin >> l >> r;
mp[r].push_back({l, i});
}
ordered_set<int> ans;
ans.insert(INT_MAX);
for(auto &[r, vec]: mp) {
sort(vec.begin(), vec.end());
for(auto &[l, pos]: vec) {
int k = ans.order_of_key(l);
auto it = ans.find_by_order(k);
if(it == ans.end() or l < *it) {
ans.insert(l);
}
else { // *it == l
int lo = 1, hi = int(ans.size()) - k - 1, mid, point = -1;
while(lo <= hi) {
mid = lo + hi >> 1;
if(*ans.find_by_order(k + mid) != l + mid) {
point = l + mid;
hi = mid - 1;
}
else lo = mid + 1;
}
if(point > r) {
cout << "nO" << endl;
return;
}
ans.insert(point);
}
}
}
ans.erase(INT_MAX);
cout << "yEs" << endl;
for(auto &i: ans) cout << i << " ";
cout << endl;
return;
}
int main() {
ios::sync_with_stdio(false); cin.tie(0);
int tc = 1;
cin >> tc;
for (int t = 1; t <= tc; t++) {
// cout << "Case " << t << ": ";
solve();
}
return 0;
}