#include <bits/stdc++.h> using namespace std; const int maxn = 1e5 + 2; int dp[12][maxn]; int main() { int n; while(~scanf("%d",&n)&&n) { int x,y,maxt=0; memset(dp,0,sizeof(dp)); for(int i=1;i<=n;i++) { scanf("%d%d",&x,&y); dp[x][y]++; maxt=max(maxt,y); } for(int j=maxt-1;j>=0;j--) { for(int i=0;i<=10;i++) { if(i==0) dp[i][j]+=max(dp[i][j+1],dp[i+1][j+1]); //if(i==10) dp[i][j]+=max(dp[i][j+1],dp[i-1][j+1]);(这里为什么要删掉) else dp[i][j]+=max(max(dp[i][j+1],dp[i+1][j+1]),dp[i-1][j+1]); } }//想想这两个循环内外关系是为什么 printf("%d\n",dp[5][0]); } return 0; }