#include<bits/stdc++.h>
using namespace std;
#define int long long
struct P{
  int t,c,x;
  bool f;
  P(){}
  P(int t,int c):t(t),c(c){x=f=0;}
  bool operator<(const P a)const{
    return t>a.t;
  } 
};
signed main(){
  int n;
  while(cin>>n,n){
    int t[n],c[n];
    for(int i=0;i<n;i++) cin>>t[i]>>c[i];
    priority_queue<P> q[2];
    for(int i=0;i<n;i++) q[0].push(P(t[i],c[i]*2-1));
    deque<P> v[2];
    while(!q[0].empty()){
      v[0].push_back(q[0].top());q[0].pop();
    }
    int ans=0;
    while(!v[0].empty()||!v[1].empty()){
      ans++;
      for(int k=0;k<2;k++){
	for(int i=0;i<(int)v[k].size();i++){
	  v[k][i].x++;
	  P p=v[k][i];
	  if((!i&&p.x>=p.t)||(i&&v[k][i-1].f&&p.x>=p.t)){
	    //cout<<ans<<":"<<k<<":"<<i<<" "<<p.t<<" "<<p.x<<" "<<p.c<<endl;
	    v[k][i].f=1;
	    if(p.c){
	      p.x=0;
	      p.c--;
	      q[!k].push(p);
	    }
	  }
	}
	while(!v[k].empty()&&v[k].front().f) v[k].pop_front();
      }
      for(int k=0;k<2;k++){
	while(!q[k].empty()){
	  v[k].push_back(q[k].top());q[k].pop();
	}
      }
    }
    cout<<ans<<endl;
  }
  return 0;
}