#include <iostream>
#include <vector>
#include <algorithm>
struct pair {
int a, b;
pair(int a, int b) : a(a), b(b) {}
std::ostream &print(std::ostream &out) const {
return (out << "(" << a << ", " << b << ")");
}
};
std::ostream &operator<<(std::ostream &out, const pair &p) { return p.print(out); }
struct topological_pair_comparator {
bool operator()(const pair &p, const pair &q) const { return p.a<q.a && p.b<q.b; }
} tpc;
std::vector<pair> pairs = {
pair(1,1),
pair(1,2),
pair(2,1),
pair(3,1),
pair(1,3),
pair(5,5),
pair(2,2),
pair(4,0)
};
int main() {
std::sort(pairs.begin(), pairs.end(), tpc);
for(const pair &p : pairs) std::cout << p << " ";
std::cout << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgoKCnN0cnVjdCBwYWlyIHsKCWludCBhLCBiOwoJcGFpcihpbnQgYSwgaW50IGIpIDogYShhKSwgYihiKSB7fQoJCglzdGQ6Om9zdHJlYW0gJnByaW50KHN0ZDo6b3N0cmVhbSAmb3V0KSBjb25zdCB7CgkJcmV0dXJuIChvdXQgPDwgIigiIDw8IGEgPDwgIiwgIiA8PCBiIDw8ICIpIik7Cgl9Cn07CgpzdGQ6Om9zdHJlYW0gJm9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtICZvdXQsIGNvbnN0IHBhaXIgJnApIHsgcmV0dXJuIHAucHJpbnQob3V0KTsgfQoKc3RydWN0IHRvcG9sb2dpY2FsX3BhaXJfY29tcGFyYXRvciB7Cglib29sIG9wZXJhdG9yKCkoY29uc3QgcGFpciAmcCwgY29uc3QgcGFpciAmcSkgY29uc3QgeyByZXR1cm4gcC5hPHEuYSAmJiBwLmI8cS5iOyB9Cn0gdHBjOwoKc3RkOjp2ZWN0b3I8cGFpcj4gcGFpcnMgPSB7CglwYWlyKDEsMSksCglwYWlyKDEsMiksCglwYWlyKDIsMSksCglwYWlyKDMsMSksCglwYWlyKDEsMyksCglwYWlyKDUsNSksCglwYWlyKDIsMiksCglwYWlyKDQsMCkKfTsKCmludCBtYWluKCkgewoJc3RkOjpzb3J0KHBhaXJzLmJlZ2luKCksIHBhaXJzLmVuZCgpLCB0cGMpOwoJZm9yKGNvbnN0IHBhaXIgJnAgOiBwYWlycykgc3RkOjpjb3V0IDw8IHAgPDwgIiAiOwoJc3RkOjpjb3V0IDw8IHN0ZDo6ZW5kbDsKCXJldHVybiAwOwp9