n = gets.to_i
hash = {}

#ハッシュのキーにインデックスを付与
n.times do |i|
  v1,v2 = gets.chomp.split
    hash[i+1] = [v1.to_s,v2.to_i]
end

# 「<=>」演算子の挙動について
# 比較する2項が全く同じ値ならば、返り値が「0」となる
#
# nonzeroメソッドについて
# レシーバが「0」ならば、返り値が「nil」になる
#
# 文字列要素でソートする
# もし文字列要素が同じならば、上記「<=>」の挙動通り、0が返り値となり、
# そして、上記nonzeroメソッドの挙動通り、全体がnilとなる
# 続いて、||　の右側の処理(数値の並び替え)が実行

# ブロック変数を | a, b | とすると、並び替え用に演算子を a <=> b として用いた場合、
# aがbより小さい時はaが先に、aがbより大きい時はaが後に並び替えられます
# || による後者への分岐は、その逆、つまり降順

order = hash.values.sort{|a,b| (a[0] <=> b[0]).nonzero? || b[1] <=> a[1]}


order.each do |i|
  hash.each do |k,v|
    puts k if v == i
  end
end
