#include<iostream> #include<sstream> #include<string> #include<vector> #include<list> #include<set> #include<map> #include<stack> #include<queue> #include<algorithm> #pragma warning(disable:4996) #include<cstdio> #include<cstdlib> using std::cin; using std::cout; using std::endl; using std::stringstream; using std::string; using std::vector; using std::list; using std::pair; using std::set; using std::multiset; using std::map; using std::multimap; using std::stack; using std::queue; using std::priority_queue; int main() { //freopen("input.txt", "r", stdin); //freopen("output.txt", "w", stdout); int T; while (cin >> T) { sign: while (T--) { int n; cin >> n; vector<pair<int, int>>segment; vector<int>result; int left, right; while (cin >> left >> right) { if (!left&&!right) { break; } if (right<0 || left>n) { continue; } segment.push_back({ left,right }); } right = 0; int j = 1000000000; for (int i = 0; i != segment.size(); i++) { if (segment[i].first <= 0 && segment[i].second > right) { j = i; right = segment[i].second; } } if (j == 1000000000) { cout << '0' << endl; if (T) { cout << endl; } continue; } else { result.push_back(j); } size_t i = 0; do { left = right; if (right >= n) { break; } int k = 1000000000; for (j=0;j!=segment.size();j++) { if (segment[j].first <= left&&segment[j].second > right) { right = segment[j].second; k = j; } } if (k == 1000000000) { cout << '0' << endl; if (T) { cout << endl; } goto sign; } else { result.push_back(k); } i++; }while(i!=segment.size()); cout << result.size() << endl; for (size_t i = 0; i < result.size(); i++) { cout << segment[result[i]].first << ' ' << segment[result[i]].second << endl; } if (T) { cout << endl; } } } return 0; }