#include<stdio.h>
#include<string.h>
#include<stdlib.h>
//快速排序,按首位元素升序
int cmp(const void *a, const void *b){
return (*(int*)a - *(int*)b);
}
//找出在该数组的索引
//注意二维数组传参要写列数
int fun(int (*que)[2], int len, int target){
for(int i = 0; i < len; i++){
if(que[i][0]==target){
return i;
}
}
return -1;
}
int main(){
int count = 0;
scanf("%d\n",&count);
//printf("%d\n",count);
int que[500][2] = {0};
int j = 0;
for(int i = 0; i < count; i++){
int ind = 0;
int val = 0;
scanf("%d %d\n", &ind, &val);
//printf("%d %d\n", ind, val);
//查询键是否已存在
int temp = fun(que,j,ind);
//不存在则添加到数组末尾
if(temp == -1){
que[j][0] = ind;
que[j++][1] = val;
}
//存在则值相加
else{
que[temp][1] = que[temp][1] + val;
}
}
//快速排序,按首位元素(键)排序
//注意,第二个元素是数组长度,所以是j而不是j-1;
qsort(que,j,sizeof(int)*2,cmp);
//遍历打印
for(int i = 0; i < j; i++){
printf("%d %d\n",que[i][0],que[i][1]);
}
return 0;
}