import java.util.Scanner;
import java.util.TreeMap;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNextLine()) {
String countStr = scanner.nextLine();
int count = Integer.parseInt(countStr);
Stream.generate(scanner::nextLine).limit(count).map(Record::new)
.collect(Collectors.groupingBy(Record::getIndex, TreeMap::new, Collectors.summingInt(Record::getValue)))
.forEach((key, value) -> System.out.println(String.format("%s %s", key, value)));
}
}
private static class Record {
public Integer getIndex() {
return index;
}
public Integer getValue() {
return value;
}
private Integer index;
private Integer value;
Record(String recordStr) {
String[] array = recordStr.split(" ");
index = Integer.valueOf(array[0]);
value = Integer.valueOf(array[1]);
}
}
}
import java.util.TreeMap;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNextLine()) {
String countStr = scanner.nextLine();
int count = Integer.parseInt(countStr);
Stream.generate(scanner::nextLine).limit(count).map(Record::new)
.collect(Collectors.groupingBy(Record::getIndex, TreeMap::new, Collectors.summingInt(Record::getValue)))
.forEach((key, value) -> System.out.println(String.format("%s %s", key, value)));
}
}
private static class Record {
public Integer getIndex() {
return index;
}
public Integer getValue() {
return value;
}
private Integer index;
private Integer value;
Record(String recordStr) {
String[] array = recordStr.split(" ");
index = Integer.valueOf(array[0]);
value = Integer.valueOf(array[1]);
}
}
}