Problem:
Rank Checker

時は2020 年。パソコン甲子園 2020 の予選結果を保存したデータがあります。このデータには、各チームに振られる整理番号と正解数が保存されています。ここでは、正解数で順位を決定するものとし、正解数の多いほうから順に 1 位、2 位 ... と順位をつけていくこととします。

予選結果のデータと整理番号をキーボードから入力して、その番号のチームの順位を出力するプログラムを作成してください。

Input

入力データは２つの部分からなります。前半の部分は、予選結果のデータ、後半の部分は順位を知りたいチーム番号の問い合わせです。予選結果のデータの形式は以下の通りです。

p1,s1
p2,s2
...
...
0,0

pi (1 ≤ pi ≤ 100 )、 si (0 ≤ si ≤ 30) はそれぞれ i チーム目の整理番号と正解数を表す整数です。整理番号と正解数がともに 0 のときこのデータの入力が終わるものとします。

続いて後半の問い合わせが複数与えられます。問い合わせの形式は以下の通りです。

q1
q2
:

各問い合わせは１行に整理番号 qi (1 ≤ qi ≤ 30) が与えられます。これを入力の最後まで処理して下さい。問い合わせの数は 100 を超えません。

Output

各問い合わせについて、チームの順位を１行に出力して下さい。

Sample Input

1,20
2,20
3,30
4,10
5,10
6,20
0,0
1
2
4
5

Output for the Sample Input

2
2
3
3

Note

入力例のデータにおいて、チームを正解数順に整列すると：

3,30
1,20
2,20
6,20
4,10
5,10

となります。ここでは、正解数を基に順位を決定するため、30問正解チームを1位、20問正解チームを2位、10問正解チームを3位とします（上位のチーム数を考慮し、10問正解チームを5位とする通常の順位付けとは異なることに注意して下さい）。

Solution in JAVA (judge verdict: Accepted)

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        List<Team> t = new ArrayList<>();
        while (true) {
            Integer[] list = Arrays.stream(sc.nextLine().split(",")).map(Integer::parseInt).toArray(Integer[]::new);
            if (list[0] == 0 && list[1] == 0) {
                break;
            }
            t.add(new Team(list[0], list[1]));
        }
        Team[] tt = t.stream().sorted(Comparator.comparing(Team::getSocre, Comparator.reverseOrder())).toArray(Team[]::new);
        tt[0].rank = 1;
        for (int i = 1; i < tt.length; i++) {
            if (tt[i - 1].getSocre() == tt[i].getSocre()) {
                tt[i].rank = tt[i-1].rank;
            } else {
                tt[i].rank = tt[i-1].rank + 1;
            }
        }
        tt = t.stream().sorted(Comparator.comparing(Team::getNumber)).toArray(Team[]::new);
        while (sc.hasNext()) {
            int n = sc.nextInt()-1;
            System.out.println(tt[n].rank);
        }
    }

    static class Team {
        int number;
        int score;
        int rank;
        Team(int number, int score) {
            this.number = number;
            this.score = score;
        }
        int getSocre() {
            return score;
        }
        int getNumber() {
            return number;
        }
    }
}