// https://szkopul.edu.pl/problemset/problem/w5PRX1QCpJeRUHpwNUpcbF6S/site/?key=statement
// Przedziały
#include <bits/stdc++.h>
// using namespace std;
#define int long long
constexpr int sizik = 1000 * 1001;
constexpr int INF = INT32_MAX;
#define ar std::array
#define pr std::pair
#define vec std::vector
typedef vec<vec<int>> _kra;
typedef ar<int, 2> P;
void solve() {
int n;
std::cin >> n;
std::map<int, int> m;
for (int i = 0; i < n; i++) {
int a, b;
std::cin >> a >> b;
m[a] = std::max(m[a], b);
}
m[INF] = INF;
std::vector<ar<int, 2>> ans;
auto [begin1_ref, end_ref] = *m.begin();
auto begin1 = begin1_ref;
auto end = end_ref;
for (const auto& [a, b] : m) {
if (a <= end) {
end = std::max(end, b);
} else {
ans.push_back({begin1, end});
begin1 = a;
end = b;
}
}
for (const auto& [a, b] : ans) {
std::cout << a << " " << b << std::endl;
}
std::cout << '\n';
}
int32_t main() {
std::ios_base::sync_with_stdio(0);
std::cin.tie(0);
std::cout.tie(0);
int t = 1;
// std::cin >> t;
for (; t > 0; t--) {
solve();
}
return 0;
}