#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <map>
#include <algorithm>
#define maxn 100000 + 10
#define ll long long
#define INF 1000000000
#define FOR(i, a, b) for(int i = a; i < b; ++i)
using namespace std;
struct dist
{
int l, r;
} d[maxn], result[maxn];
bool cmp(dist a, dist b)
{
if(a.l == b.l) return a.r>b.r;
return a.l<b.l;
}
int main()
{
int t;
scanf("%d", &t);
while(t--)
{
int m;
scanf("%d", &m);
int a, b, len = 0;
while(scanf("%d%d", &a, &b))
{
if(a == 0 && b == 0) break;
d[len].l = a;
d[len].r = b;
++len;
}
sort(d, d+len, cmp);
int ans = 0, pos = -1, pos_i;
bool ok = false;
FOR(i, 0, len)
{
if(d[i].l <= 0 && d[i].r >= 0)
{
if(d[i].r > pos)
{
pos = d[i].r;
pos_i = i;
}
ok = true;
}
}
if(ok) {++ans; result[0].l = d[pos_i].l; result[0].r = d[pos_i].r;}
if(!ok) printf("0\n");
else
{
while(pos < m)
{
int maxright = -1;
FOR(i, pos_i+1, len) if(d[i].l <= pos)
if(d[i].r > maxright)
{
pos_i = i;
maxright = d[i].r;
}
if(maxright == -1)
{
ok = false;
break;
}
pos = maxright;
result[ans].l = d[pos_i].l;
result[ans].r = d[pos_i].r;
++ans;
}
if(ok) {
printf("%d\n", ans);
FOR(i, 0, ans) printf("%d %d\n", result[i].l, result[i].r);
}
else printf("0\n");
}
if(t) printf("\n");
}
return 0;
}
07-18
07-18
07-18
07-18
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交