#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
struct point{
int index;
int x;
int y;
};
bool comp1(const point& p1,const point& p2){
if(p1.x<p2.x)
return true;
if(p1.x==p2.x){
if(p1.y<p2.y)
return true;
return false;
}
return true;
}
bool comp2(const point &p1,const point &p2){
if(p1.y<p2.y)
return true;
if(p1.y==p2.y){
if(p1.x<p2.x)
return true;
}
return false;
}
int main() {
int n;
vector<point> px,py;
cin>>n;
point p;
for(int i=0;i<n;i++){
cin>>p.x>>p.y;
p.index = i+1;
px.push_back(p);
py.push_back(p);
}
std::cout << "input:\n";
for(const auto& p : px)
cout << p.x << " " << p.y << "\t ";
cout<<endl;
sort(px.begin(),px.end(),comp1);
sort(py.begin(),py.end(),comp2);
std::cout << "increasing x, y:\n";
vector<point>::iterator it;
for(it=px.begin();it!=px.end();it++)
cout<<it->x<<" "<<it->y<<"\t ";
cout<<endl;
std::cout << "increasing y, x:\n";
for(it=py.begin();it!=py.end();it++)
cout<<it->x<<" "<<it->y<<"\t ";
cout<<endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IHBvaW50ewogICAgaW50IGluZGV4OwogICAgaW50IHg7CiAgICBpbnQgeTsKfTsKCmJvb2wgY29tcDEoY29uc3QgcG9pbnQmIHAxLGNvbnN0IHBvaW50JiBwMil7CiAgICBpZihwMS54PHAyLngpCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICBpZihwMS54PT1wMi54KXsKICAgICAgICBpZihwMS55PHAyLnkpCiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIHJldHVybiB0cnVlOwp9Cgpib29sIGNvbXAyKGNvbnN0IHBvaW50ICZwMSxjb25zdCBwb2ludCAmcDIpewogICAgaWYocDEueTxwMi55KQogICAgICAgIHJldHVybiB0cnVlOwogICAgaWYocDEueT09cDIueSl7CiAgICAgICAgaWYocDEueDxwMi54KQogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKfQoKaW50IG1haW4oKSB7CiAgICAgICAgaW50IG47CiAgICAgICAgdmVjdG9yPHBvaW50PiBweCxweTsKICAgICAgICBjaW4+Pm47CiAgICAgICAgcG9pbnQgcDsKICAgICAgICBmb3IoaW50IGk9MDtpPG47aSsrKXsKICAgICAgICAgICAgY2luPj5wLng+PnAueTsKICAgICAgICAgICAgcC5pbmRleCA9IGkrMTsKICAgICAgICAgICAgcHgucHVzaF9iYWNrKHApOwogICAgICAgICAgICBweS5wdXNoX2JhY2socCk7CgogICAgICAgIH0KCiAgICAgICAgc3RkOjpjb3V0IDw8ICJpbnB1dDpcbiI7CiAgICAgICAgZm9yKGNvbnN0IGF1dG8mIHAgOiBweCkKICAgICAgICAgICAgY291dCA8PCBwLnggPDwgIiAiIDw8IHAueSA8PCAiXHQgICAiOwogICAgICAgIGNvdXQ8PGVuZGw7CgogICAgICAgIHNvcnQocHguYmVnaW4oKSxweC5lbmQoKSxjb21wMSk7CiAgICAgICAgc29ydChweS5iZWdpbigpLHB5LmVuZCgpLGNvbXAyKTsKCiAgICAgICAgc3RkOjpjb3V0IDw8ICJpbmNyZWFzaW5nIHgsIHk6XG4iOwogICAgICAgIHZlY3Rvcjxwb2ludD46Oml0ZXJhdG9yIGl0OwogICAgICAgIGZvcihpdD1weC5iZWdpbigpO2l0IT1weC5lbmQoKTtpdCsrKQogICAgICAgICAgICBjb3V0PDxpdC0+eDw8IiAiPDxpdC0+eTw8Ilx0ICAgIjsKICAgICAgICBjb3V0PDxlbmRsOwoKICAgICAgICBzdGQ6OmNvdXQgPDwgImluY3JlYXNpbmcgeSwgeDpcbiI7CiAgICAgICAgZm9yKGl0PXB5LmJlZ2luKCk7aXQhPXB5LmVuZCgpO2l0KyspCiAgICAgICAgICAgIGNvdXQ8PGl0LT54PDwiICI8PGl0LT55PDwiXHQgICAiOwogICAgICAgIGNvdXQ8PGVuZGw7Cn0KCg==