#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int t;
cin >> t; // Number of test cases
while (t--) {
int n;
cin >> n; // Number of segments
vector<pair<int, int>> segments(n);
// Reading the segments
for (int i = 0; i < n; ++i) {
cin >> segments[i].first >> segments[i].second;
}
// Sorting the segments based on the left endpoint
sort(segments.begin(), segments.end());
vector<int> result;
int last_chosen = -1;
bool possible = true;
// Greedy approach to select the elements
for (int i = 0; i < n; ++i) {
int l = segments[i].first;
int r = segments[i].second;
// We need to pick a number that is greater than last_chosen and <= r
if (last_chosen + 1 <= r) {
int chosen = max(last_chosen + 1, l);
result.push_back(chosen);
last_chosen = chosen;
} else {
possible = false;
break;
}
}
// Output the result
if (possible) {
cout << "YES\n";
for (int i = 0; i < n; ++i) {
cout << result[i] << " ";
}
cout << "\n";
} else {
cout << "NO\n";
}
}
return 0;
}