import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Map;
import java.util.Map.Entry;
import java.util.TreeMap;

public class Main {
public static void main(String args[]) throws IOException {
// 数据表记录包含表索引和数值(int范围的整数),请对表索引相同的记录进行合并,
// 即将相同索引的数值进行求和运算,输出按照key值升序进行输出。
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String temp;
while((temp=bf.readLine())!=null)
{
int i = Integer.parseInt(temp);
Map <Integer,Integer>map = new TreeMap<Integer,Integer>();
for (int j = 0; j <i; j++) {
String ss = bf.readLine();
if (!map.containsKey(Integer.parseInt(ss.split(" ")[0]))){
map.put(Integer.parseInt(ss.split(" ")[0]), Integer.parseInt(ss.split(" ")[1]));
}
else
{
map.put(Integer.parseInt(ss.split(" ")[0]), (map.get(Integer.parseInt(ss.split(" ")[0]))+Integer.parseInt(ss.split(" ")[1])));
}
}
for (Entry<Integer,Integer>entry : map.entrySet()) {
System.out.println(entry.getKey()+" "+entry.getValue());
}
}

}

}