A scenic location is represented by its `name` and attractiveness `score`, where `name` is a **unique** string among all locations and `score` is an integer. Locations can be ranked from the best to the worst. The **higher** the score, the better the location. If the scores of two locations are equal, then the location with the **lexicographically smaller** name is better.

You are building a system that tracks the ranking of locations with the system initially starting with no locations. It supports:

*   **Adding** scenic locations, **one at a time**.
*   **Querying** the `ith` **best** location of **all locations already added**, where `i` is the number of times the system has been queried (including the current query).
    *   For example, when the system is queried for the `4th` time, it returns the `4th` best location of all locations already added.

Note that the test data are generated so that **at any time**, the number of queries **does not exceed** the number of locations added to the system.

Implement the `SORTracker` class:

*   `SORTracker()` Initializes the tracker system.
*   `void add(string name, int score)` Adds a scenic location with `name` and `score` to the system.
*   `string get()` Queries and returns the `ith` best location, where `i` is the number of times this method has been invoked (including this invocation).

**Example 1:**

**Input**
\[ "SORTracker ",  "add ",  "add ",  "get ",  "add ",  "get ",  "add ",  "get ",  "add ",  "get ",  "add ",  "get ",  "get "\]
\[\[\], \[ "bradford ", 2\], \[ "branford ", 3\], \[\], \[ "alps ", 2\], \[\], \[ "orland ", 2\], \[\], \[ "orlando ", 3\], \[\], \[ "alpine ", 2\], \[\], \[\]\]
**Output**
\[null, null, null,  "branford ", null,  "alps ", null,  "bradford ", null,  "bradford ", null,  "bradford ",  "orland "\]

**Explanation**
SORTracker tracker = new SORTracker(); // Initialize the tracker system.
tracker.add( "bradford ", 2); // Add location with name= "bradford " and score=2 to the system.
tracker.add( "branford ", 3); // Add location with name= "branford " and score=3 to the system.
tracker.get();              // The sorted locations, from best to worst, are: branford, bradford.
                            // Note that branford precedes bradford due to its **higher score** (3 > 2).
                            // This is the 1st time get() is called, so return the best location:  "branford ".
tracker.add( "alps ", 2);     // Add location with name= "alps " and score=2 to the system.
tracker.get();              // Sorted locations: branford, alps, bradford.
                            // Note that alps precedes bradford even though they have the same score (2).
                            // This is because  "alps " is **lexicographically smaller** than  "bradford ".
                            // Return the 2nd best location  "alps ", as it is the 2nd time get() is called.
tracker.add( "orland ", 2);   // Add location with name= "orland " and score=2 to the system.
tracker.get();              // Sorted locations: branford, alps, bradford, orland.
                            // Return  "bradford ", as it is the 3rd time get() is called.
tracker.add( "orlando ", 3);  // Add location with name= "orlando " and score=3 to the system.
tracker.get();              // Sorted locations: branford, orlando, alps, bradford, orland.
                            // Return  "bradford ".
tracker.add( "alpine ", 2);   // Add location with name= "alpine " and score=2 to the system.
tracker.get();              // Sorted locations: branford, orlando, alpine, alps, bradford, orland.
                            // Return  "bradford ".
tracker.get();              // Sorted locations: branford, orlando, alpine, alps, bradford, orland.
                            // Return  "orland ".

**Constraints:**

*   `name` consists of lowercase English letters, and is unique among all locations.
*   `1 <= name.length <= 10`
*   `1 <= score <= 105`
*   At any time, the number of calls to `get` does not exceed the number of calls to `add`.
*   At most `4 * 104` calls **in total** will be made to `add` and `get`.

경치 좋은 장소는 '이름'과 매력도 '점수'로 표시되며, 여기서 '이름'은 모든 위치 중에서 **고유한** 문자열이고 '점수'는 정수입니다. 위치는 최고부터 최하위까지 순위를 매길 수 있습니다. 점수가 높을수록 더 좋은 위치입니다. 두 위치의 점수가 같을 경우, **자모적으로 작은** 이름을 가진 위치가 더 좋은 위치입니다.

처음에 위치가 없는 상태에서 시작하여 위치의 순위를 추적하는 시스템을 구축하고 있습니다. 지원합니다:

* 경치 좋은 위치를 **한 번에 하나씩** **추가하기**.
* 이미 추가된 **모든 위치 중 **최고의** 위치를 **쿼리**하는 경우, 여기서 `i`는 시스템이 쿼리된 횟수(현재 쿼리 포함)입니다.
    * 예를 들어, 시스템이 '4번째'로 쿼리되면 이미 추가된 모든 위치 중 '4번째'로 가장 좋은 위치를 반환합니다.

테스트 데이터는 **언제든** 쿼리 횟수가 시스템에 추가된 위치 수를 **초과하지** 않도록 생성됩니다.

SORTracker` 클래스를 구현합니다:

* `SORTracker()` 트래커 시스템을 초기화합니다.
* `void add(string name, int score)` `이름`과 `점수`를 가진 경치 좋은 위치를 시스템에 추가합니다.
* `string get()` 최적의 위치를 조회하여 반환합니다. 여기서 `i`는 이 메서드가 호출된 횟수(이번 호출 포함)입니다.

**예제 1:**

**입력**
\["SORTracker ", "add ", "add ", "get ", "add ", "get ", "add ", "get ", "add ", "get ", "add ", "get ", "get "\]
\[\[\], \["bradford ", 2\], \["branford ", 3\], \[\], \["alps ", 2\], \[\], \["orland ", 2\], \[\], \["orlando ", 3\], \[\], \["alpine ", 2\], \[\], \[\], \[\]\]
**출력**
\[널, 널, 널, 널, "브랜포드", 널, "알프스", 널, "브래드포드", 널, "브래드포드", 널, "브래드포드", "올랜드"\]

설명** **설명
SORTracker tracker = new SORTracker(); // 트래커 시스템을 초기화합니다.
tracker.add( "bradford ", 2); // 이름="bradford", 점수=2인 위치를 시스템에 추가합니다.
tracker.add( "브랜포드 ", 3); // 이름= "브랜포드", 점수=3인 위치를 시스템에 추가합니다.
tracker.get(); // 최고부터 최하위까지 정렬된 위치는 다음과 같습니다: 브랜포드, 브래드포드.
                            // 브랜포드의 점수가 더 높기 때문에(3 > 2) 브랜포드가 브래드포드보다 앞선다는 점에 유의하세요.
                            // get()이 처음 호출되는 경우이므로 가장 좋은 위치를 반환합니다:  "브랜포드 ".
tracker.add("alps ", 2); // 이름="alps ", 점수=2인 위치를 시스템에 추가합니다.
tracker.get(); // 정렬된 위치: 브랜포드, 알프스, 브래드포드.
                            // 같은 점수(2)임에도 불구하고 알프스가 브래드포드보다 앞선다는 점에 유의하세요.
                            // 이는 "alps"가 "bradford"보다 **표기법적으로** 작기 때문입니다.
                            // get()이 두 번째로 호출되므로 두 번째로 좋은 위치인 "alps"를 반환합니다.
tracker.add("orland ", 2); // 이름="orland", 점수=2인 위치를 시스템에 추가합니다.
tracker.get(); // 정렬된 위치: 브랜포드, 알프스, 브래드포드, 올랜드.
                            // get() 호출이 세 번째이므로 "bradford"를 반환합니다.
tracker.add("orlando ", 3); // 이름="orlando", 점수=3인 위치를 시스템에 추가합니다.
tracker.get(); // 정렬된 위치: 브랜포드, 올랜도, 알프스, 브래드포드, 올랜드.
                            // "bradford"를 반환합니다.
tracker.add( "알파인 ", 2); // 이름="알파인", 점수=2인 위치를 시스템에 추가합니다.
tracker.get(); // 정렬된 위치: 브랜포드, 올랜도, 알파인, 알프스, 브래드포드, 올랜드.
                            // "브래드포드"를 반환합니다.
tracker.get(); // 정렬된 위치: 브랜포드, 올랜도, 알파인, 알프스, 브래드포드, 올랜드.
                            // "orland"를 반환합니다.

**제약 조건:**

* `name`은 영문 소문자로 구성되며 모든 위치에서 고유합니다.
* `1 <= name.length <= 10`
* `1 <= score <= 105`
* 어떤 경우에도 `get`에 대한 호출 횟수는 `add`에 대한 호출 횟수를 초과하지 않습니다.
최대 `4 * 104` 호출은 `add`와 `get`에 **총 **4회** 호출됩니다.
