600101 - 游戏积分

Time Limit

100 毫秒

Memory Limit

128 MB

通过次数

7

提交次数

19

给出n条比赛记录,每条记录中是比赛者name_i和该轮积分val_i,比赛结束时个人积分之和最大值记为m。若只有一个人个人积分之和为m则此人获胜;若存在多个个人积分之和为m,则这些个人积分之和为m的人中第一个在比赛过程中达到或超过m分的人获胜

初始积分为0分,比赛结束至少有一人总积分为正,输出获胜者的名字和最终积分。

Input

第一行,一个整数n,表示记录条数。

接下来n行,每行有单个空格分隔的两个数据name_ival_i表示第i轮比赛者姓名和得分。

对于100%的数据:

1 \le name_i.size() \le 100 ,且名字只包含大小写英文字母。

1 \le n \le 1000

-1000 \le val_i \le 1000

Output

一行,由单个空格分隔的两个数据,分别表示获胜者的名字和总积分,不得有多于的前导或后续空格。

Examples

Input

3
mike 3
andrew 5
mike 2

Output

andrew 5

Input

8 
d 13
c 12 
a 1 
a 1 
a 1 
b 10 
d -12 
a 9

Output

c 12

Input

5
a 4
b 6
a 2
b -2
b 2

Output

b 6

Hint

知识支持:

map可以把“键、值”结合在一起,可以简单的理解为数组的元素可以是任何东西但下标只能是数字,map的元素和下标都可以是任何东西,例如:

map<string,int> mp;    //创建一个键类型string,值类型int的map
    
mp[name]=mp[name]+v;  //读和写,name为键(key,关键字),用mp[name]这样的下标方式访问时即使map中不存在name这个键也会自动创建一个,其值(int)默认值为0。
    
    //遍历时与数组不同,遍历map需要使用迭代器(iterator)
    //迭代器“引用”了“键值对”,即当前的一对string和int,所以访问迭代器的具体内容用->而不是.
    //it->first表示当前的键,即"下标"string
    //it->second表示当前的位置的值,即"下标"string对应的int数值
	for(map<string,int>::iterator it=mp.begin();it!=mp.end();it++){
		if(it->second>mv)mv=it->second;  //second表示键值对中的值,即int
	}

此外,map还支持另外一些常用操作:

查找:mp.find("key")	//查找"key"关键字是否存在于map,存在返回指向这个键值对的迭代器,不存在返回mp.end()

查找:mp.count("key")	//查找"key"关键字对应的元素的个数。其返回值为size_t类型,只可能是0或1。

删除:mp.erase("key")	//删除"key"关键字的元素,返回删除的个数,只能是0或1

删除:mp.erase(it)	//删除迭代器it所指向的元素

删除:mp.erase(mp.begin(),mp.end())//删除mp的begin()迭代器到end()迭代器之间的元素,不包含end()迭代器。这样写相当于清空mp。

清空:mp.clear()	//清空mp,删除其中所有的键值对。

元素个数:mp.size()	//存在多少键值对