#include <iostream>
#include <unordered_map>
#include <algorithm>
#include <vector>
using namespace std;

bool cmp(vector<int>&a, vector<int>&b)
{
    return a[0]<b[0];
}

int main() {
    int n;
    unordered_map<int, int> dat;
    cin>>n;
    for(int i=0; i<n; ++i)
    {
        int k,v;
        cin>>k>>v;
        dat[k] +=v;
    }

    int m = dat.size();

    vector<vector<int>> ans(m, vector<int>(2));

    int ind = 0;
    // for(auto& kv:dat)
    // {
    //     // cout<<kv.first<<" "<<kv.second<<endl;
    //     ans[ind][0]=kv.first;
    //     ans[ind][1]=kv.second;
    //     ind++;
    // }
    // 两种遍历哈希map的方式 记住
    for(auto [k, v]:dat)
    {
        // cout<<k<<" "<<v<<endl;
        ans[ind][0]=k;
        ans[ind][1]=v;
        ind++;
    }
    
    //排序
    sort(ans.begin(), ans.end(), cmp);

    // 输出

    for(int i=0; i<m; ++i)
    {
        cout<<ans[i][0]<<" "<<ans[i][1]<<endl;
    }

}
// 64 位输出请用 printf("%lld")