#include using namespace std; // 有理数 Fraction (符号は分子に押し付ける) template class Fraction { public: // 分子と分母 (a over b) T a, b; // 0/1 で初期化 Fraction() : a(0), b(1) {} // a/b で初期化 Fraction(T a, T b = 1) { T g = gcd(a, b); this->a = (b > 0 ? a : -a) / g; this->b = abs(b) / g; } // 整数か判定 bool isint() { return b == 1; } // 絶対値 friend Fraction abs(const Fraction& r) { return Fraction(abs(r.a), r.b); } // 等しい friend bool operator==(const Fraction& r1, const Fraction& r2) { return r1.a * r2.b == r1.b * r2.a; } // より小さい friend bool operator<(const Fraction& r1, const Fraction& r2) { return r1.a * r2.b < r1.b * r2.a; } // より小さいか等しい friend bool operator<=(const Fraction& r1, const Fraction& r2) { return r1.a * r2.b <= r1.b * r2.a; } // より大きい friend bool operator>(const Fraction& r1, const Fraction& r2) { return r1.a * r2.b > r1.b * r2.a; } // より大きいか等しい friend bool operator>=(const Fraction& r1, const Fraction& r2) { return r1.a * r2.b >= r1.b * r2.a; } // 足し算 friend Fraction operator+(const Fraction& r1, const Fraction& r2) { return Fraction(r1.a * r2.b + r1.b * r2.a, r1.b * r2.b); } // 引き算 friend Fraction operator-(const Fraction& r1, const Fraction& r2) { return Fraction(r1.a * r2.b - r1.b * r2.a, r1.b * r2.b); } // 掛け算 friend Fraction operator*(const Fraction& r1, const Fraction& r2) { return Fraction(r1.a * r2.a, r1.b * r2.b); } // 割り算 friend Fraction operator/(const Fraction& r1, const Fraction& r2) { return Fraction(r1.a * r2.b, r1.b * r2.a); } // 自身への足し算 Fraction& operator+=(const Fraction& r) { *this = *this + r; return *this; } // 自身への引き算 Fraction& operator-=(const Fraction& r) { *this = *this - r; return *this; } // 自身への掛け算 Fraction& operator*=(const Fraction& r) { *this = *this * r; return *this; } // 自身への割り算 Fraction& operator/=(const Fraction& r) { *this = *this / r; return *this; } // 出力 friend ostream& operator<<(ostream& os, const Fraction& r) { os << r.a; if (r.b != 1) os << '/' << r.b; return os; } }; #define rep(i, n) for (int i = 0; i < (int)(n); ++i) int main() { // Input int n; cin >> n; vector> v(n); rep(i, n) cin >> v[i].a >> v[i].b; // Output sort(v.rbegin(), v.rend()); rep(i, n) cout << v[i].a << ' ' << v[i].b << endl; }