#include <iostream>
#include <queue>
#include <cmath>
class C {
protected :
double a, b;
public :
C( ) { }
C( double a, double b) { this- > a = a; this- > b = b; }
friend double abs ( C c) { return sqrt ( c.a * c.a + c.b * c.b ) ; }
friend std:: ostream & operator<< ( std:: ostream & s, C & c) {
s << '(' << c.a << ',' << c.b << ')' ;
return s;
}
} ;
double myabs( C c) { return sqrt ( c.a * c.a + c.b * c.b ) ; }
class CCompare : C {
public :
bool operator( ) ( C & r, C & s) { return myabs( r) < myabs( s) ; }
} ;
int main( ) {
C c;
std:: priority_queue < C, std:: vector < C> , CCompare> pq;
pq.push ( C( 3 , 1 ) ) ;
pq.push ( C( 4 , 1 ) ) ;
pq.push ( C( 5 , 9 ) ) ;
pq.push ( C( 2 , 6 ) ) ;
pq.push ( C( 5 , 3 ) ) ;
while ( ! pq.empty ( ) ) {
c = pq.top ( ) ;
pq.pop ( ) ;
std:: cout << c << std:: endl ;
}
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8cXVldWU+CiNpbmNsdWRlIDxjbWF0aD4KCmNsYXNzIEMgewpwcm90ZWN0ZWQ6CiAgZG91YmxlIGEsIGI7CnB1YmxpYzoKICBDKCkge30KICBDKGRvdWJsZSBhLCBkb3VibGUgYikgeyB0aGlzLT5hID0gYTsgdGhpcy0+YiA9IGI7IH0KICBmcmllbmQgZG91YmxlIGFicyhDIGMpIHsgcmV0dXJuIHNxcnQoYy5hICogYy5hICsgYy5iICogYy5iKTsgfQogIGZyaWVuZCBzdGQ6Om9zdHJlYW0gJm9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtICZzLCBDICZjKSB7CiAgICBzIDw8ICcoJyA8PCBjLmEgPDwgJywnIDw8IGMuYiA8PCAnKSc7CiAgICByZXR1cm4gczsKICB9Cn07Cgpkb3VibGUgbXlhYnMoQyBjKSB7IHJldHVybiBzcXJ0KGMuYSAqIGMuYSArIGMuYiAqIGMuYik7IH0KCmNsYXNzIENDb21wYXJlIDogQyB7CnB1YmxpYzoKICBib29sIG9wZXJhdG9yKCkoQyAmciwgQyAmcykgeyByZXR1cm4gbXlhYnMocikgPCBteWFicyhzKTsgfQp9OwoKaW50IG1haW4oKSB7CiAgQyBjOwogIHN0ZDo6cHJpb3JpdHlfcXVldWU8Qywgc3RkOjp2ZWN0b3I8Qz4sIENDb21wYXJlPiBwcTsKICBwcS5wdXNoKEMoMywgMSkpOwogIHBxLnB1c2goQyg0LCAxKSk7CiAgcHEucHVzaChDKDUsIDkpKTsKICBwcS5wdXNoKEMoMiwgNikpOwogIHBxLnB1c2goQyg1LCAzKSk7CiAgd2hpbGUgKCFwcS5lbXB0eSgpKSB7CiAgICBjID0gcHEudG9wKCk7CiAgICBwcS5wb3AoKTsKICAgIHN0ZDo6Y291dCA8PCBjIDw8IHN0ZDo6ZW5kbDsKICB9CiAgcmV0dXJuIDA7Cn0KCiAg