#include <bits/stdc++.h>
using namespace std;
struct ac {
  int val;
  bool dir;
} t[2001000];
struct ANS {
  int x, y;
} ans[1230000];
int n, k, m, q;
bool cmp(const ac x, const ac y) {
  if (x.val != y.val) {
    return x.val < y.val;
  } else {
    return !x.dir;
  }
}
void input() {
  int i;
  int x, y;
  q = m = 0;
  for (i = 0; i < n; i++) {
    scanf("%d %d", &x, &y);
    t[m].val = x;
    t[m].dir = 0;
    m++;
    t[m].val = y;
    t[m].dir = 1;
    m++;
  }
  sort(t, t + m, cmp);
}
void solve() {
  int i, j;
  int s = -1;
  int cur = 0;
  bool flag = false;
  for (i = 0; i < m; i++) {
    if (i + 1 < m && t[i].val == t[i + 1].val) {
      while (i < m && t[i].val == t[i + 1].val && t[i].dir == t[i + 1].dir) {
        if (t[i].dir == 0) {
          cur++;
        } else {
          cur--;
        }
        i++;
      }
      if (t[i].dir == 0) {
        cur++;
      } else {
        cur--;
      }
    } else {
      if (t[i].dir == 0) {
        cur++;
      } else {
        cur--;
      }
    }
    if (cur >= k) {
      if (!flag) {
        s = t[i].val;
        flag = true;
      }
    } else {
      if (flag) {
        ans[q].x = s;
        ans[q].y = t[i].val;
        q++;
        flag = false;
      }
    }
  }
  printf("%d\n", q);
  for (i = 0; i < q; i++) {
    printf("%d %d\n", ans[i].x, ans[i].y);
  }
}
int main() {
  while (scanf("%d %d", &n, &k) != EOF) {
    input();
    solve();
  }
  return 0;
}
