//题目回忆:给定一些种类和每个种类的个数,可以把两个相同的种类合并,合并后变为种类*2,求最小个数
//用map模拟,生成新数后加到新数的map上即可
//未想到如何处理产生的新数,用map添加很方便
#include <iostream>
#include <map>
#include <cmath>
using namespace std;
const int N = 1e5+10;
typedef long long LL;
int c[N],s[N];
map<LL,LL>m;
int main()
{
int n;
cin>>n;
int ans=0;
for(int i=0;i<n;i++)
{
int s,c;
cin>>s>>c;
m[s]=c;
}
for(auto &[a,b]:m)
{
if(b>=2)
{
m[a*2]+=b/2;
ans+=b%2;
}
else ans+=b;
}
cout<<ans;
return 0;
}