水
#include <iostream>
#include <cstdio>
#include <iomanip>
#include <string>
#include <cstdlib>
#include <cstring>
#include <queue>
#include <set>
#include <vector>
#include <map>
#include <algorithm>
#include <cmath>
#include <stack>
#include <stdlib.h>
#include <stdio.h>
#define INF 0x3f3f3f3f
#define LINF 0x3f3f3f3f3f3f3f3f
#define ll long long
#define ull unsigned long long
#define uint unsigned int
#define l(x) x<<1
#define r(x) x<<1|1
#define ms(a,b) memset(a,b,sizeof(a))
using namespace std;
struct node {
int s, t;
node(int a,int b):
s(a),t(b){}
node(){}
};
bool cmp(const node &a, const node &b) {
if (a.s == b.s)
return a.t < b.t;
return a.s < b.s;
}
int n,mmax;
node demo[55555];
int main() {
scanf("%d", &n);
mmax = 0;
for (int i = 0; i < n; i++) {
scanf("%d%d", &demo[i].s, &demo[i].t);
mmax = max(demo[i].t, mmax);
}
sort(demo, demo + n, cmp);
node temp(demo[0].s, demo[0].t);
for (int i = 0; i < n; i++) {
if (demo[i].s >=temp.s && demo[i].s<=temp.t) {
temp.t = max(temp.t, demo[i].t);
}
else {
printf("%d %d\n", temp.s, temp.t);
temp = demo[i];
}
}
printf("%d %d\n", temp.s, temp.t);
return 0;
}