原题链接
#include <bits/stdc++.h>
#define maxn 1000005
using namespace std;
typedef long long ll;
struct Node{
Node(){
}
Node(int a, int b){
l = a;
r = b;
}
int l, r;
}node[maxn];
vector<Node> v;
int n, k, d[maxn<<1], p[maxn<<1];
int main(){
// freopen("in.txt", "r", stdin);
scanf("%d%d", &n, &k);
for(int i = 0; i < n; i++){
scanf("%d%d", &node[i].l, &node[i].r);
d[2*i] = node[i].l;
d[2*i+1] = node[i].r;
}
sort(d, d+2*n);
int cnt = 2 * n;
for(int i = 0; i < n; i++){
int k1 = lower_bound(d, d+cnt, node[i].l) - d;
p[k1+1]++;
int k2 = upper_bound(d, d+cnt, node[i].r) - d;
p[k2]--;
}
for(int i = 1; i <= cnt; i++)
p[i] += p[i-1];
int l = -1, r = -1;
for(int i = 0; i <= cnt; i++){
if(l == -1 && p[i] >= k)
l = i;
if(l != -1 && p[i] < k){
r = i;
v.push_back(Node(d[l-1], d[r-1]));
l = -1;
}
}
printf("%d\n", v.size());
for(int i = 0; i < v.size(); i++)
printf("%d %d\n", v[i].l, v[i].r);
return 0;
}