#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <functional>
class player{
public:
player(const std::string& name)
:_name(name), _score(0)
{
}
void addscore(int score)
{
_score += score;
_count ++;
_scores.push_back(_score);
_counts.push_back(_count);
}
inline const std::string& name()
{
return _name;
}
int reach()
{
std::vector<int>::iterator pos;
pos = std::find_if(_scores.begin(), _scores.end(),
std::not1(std::bind2nd(std::less<int>(), _score)));
std::vector<int>::difference_type dis;
dis = std::distance(_scores.begin(), pos);
return _counts[dis];
}
const bool operator < (player __x)
{
return ((_score < __x._score) ||
((_score == __x._score) && (reach() > __x.reach())));
}
const bool operator == (const player& __x)
{
return _name == __x._name;
}
private:
std::vector<int> _scores;
std::vector<int> _counts;
std::string _name;
int _score;
static int _count;
};
int player::_count = 0;
int main()
{
int n;
std::vector<player> players;
std::cin >> n;
for(int i = 0; i < n; ++i)
{
std::string name; int score;
std::cin >> name >> score;
std::vector<player>::iterator iter;
iter = std::find(players.begin(), players.end(), player(name));
if(iter == players.end())
{
players.push_back(player(name));
players.back().addscore(score);
}
else
iter->addscore(score);
}
std::vector<player>::iterator winner;
winner = std::max_element(players.begin(), players.end());
std::cout << winner->name() << std::endl;
}