#include <bits/stdc++.h>
using namespace std;
int n, a, b;
map<int, int> mp; // 定义一个map,用于存储键值对
int main() {
scanf("%d", &n); // 读取输入的整数n
mp[1e9] = 1; // 将1e9作为键,1作为值存入map中
while (n--) { // 循环n次
scanf("%d %d", &a, &b); // 读取输入的两个整数a和b
auto itr1 = mp.lower_bound(b); // 在map中查找第一个大于等于b的键值对
if (itr1 == mp.begin()) { // 如果找到了这样的键值对
printf("%d %d\n", a, itr1->second); // 输出a和对应的值
} else { // 如果没有找到这样的键值对
auto itr2 = itr1; // 将itr1赋值给itr2
--itr2; // 将itr2指向前一个元素
if (b - itr2->first < itr1->first - b) { // 如果b与前一个元素的差小于当前元素与b的差
printf("%d %d\n", a, itr2->second); // 输出a和前一个元素的值
} else if (itr1->first - b < b - itr2->first) { // 如果当前元素与b的差小于b与前一个元素的差
printf("%d %d\n", a, itr1->second); // 输出a和当前元素的值
} else if (itr1->second < itr2->second) { // 如果当前元素的值小于前一个元素的值
printf("%d %d\n", a, itr1->second); // 输出a和当前元素的值
} else { // 如果前一个元素的值小于当前元素的值
printf("%d %d\n", a, itr2->second); // 输出a和前一个元素的值
}
}
if (mp.count(b) == 0 || mp[b] > a) { // 如果map中不存在键为b的元素,或者map中键为b的元素的值大于a
mp[b] = a; // 将a作为键b的值存入map中
}
}
return 0; // 程序结束,返回0
}