/*
    题意:N轮,每一轮给出A,给出B,回答每一轮(Ai + Bj)的最大值的最小
           N <= 10^5  1 <= Ai,Bi <= 100
    贪心的性质,让A的最大值跟B的最小值匹配
    原因:
           1)若Amax + Bmin 就是答案了,则不用拆开,拆开了得不到更优的
           2)若Amax + Bmin 不是答案,设最大的 Ax + By,若拆开,则匹配为Amax + By, Ax + Bmin
             显然Amax + By > Amax + Bmin 不会更优,所以不能拆开
     好了,这就表明,A的大的要匹配B的小的,然后答案就是所有匹配的最大值了
     但是 N <= 10^5 ,即使不用排序,找最大值也是N,O(N^5)过不了!!

     但 1 <= Ai,Bi <= 100 ,统计A,B在区间[1,100]出现的个数即可!!
     复杂度的降为 O(100N)!!
*/

#include
<cstdio>
#include
<cstring>

const int MAXN = 101;

inline 
int min(int a,int b){return a<b?a:b;}
inline 
int max(int a,int b){return a>b?a:b;}

int a[MAXN],b[MAXN];
int ca[MAXN],cb[MAXN];

int main()
{
    freopen(
"in","r",stdin);
    
//freopen("out","w",stdout);

    
int n,x,y;
    
while~scanf("%d",&n) )
    
{
        memset(a,
0,sizeof(a));
        memset(b,
0,sizeof(b));
        
for(int i=1;i<=n;i++)
        
{
            scanf(
"%d%d",&x,&y);
            a[x]
++;
            b[y]
++;
            
for(int i=1;i<=100;i++)
            
{
                ca[i] 
= a[i];
                cb[i] 
= b[i];
            }

            
int ans = 0;
            
int ap = 100,bp = 1;
            
while( ap > 0 && bp < 101 )//复杂度降为了100!!!
            {
                
while( ap > 0 && !ca[ap] ) ap--;
                
while( bp < 101 && !cb[bp] ) bp++;

                
if( ap == 0 || bp == 101 ) break;

                
if( ans < ap + bp ) ans = ap + bp;
                
if ( ca[ap] > cb[bp] )
                
{
                    ca[ap] 
-= cb[bp];
                    cb[bp] 
= 0;
                }

                
else {
                    cb[bp] 
-= ca[ap];
                    ca[ap] 
= 0;
                }

            }

            printf(
"%d\n",ans);
        }

    }

    
return 0;
}