/*设计的算法时间空间复杂度都较高,但是AC了,希望大神能够指点改进*/
#include<cstdio>
#include<cmath>
#include<algorithm>
#define maxn 100010
using namespace std;
int a[15][maxn],dp[15][maxn];//dp[i][j]表示第i个位置第j天
int main()
{
int n;
while(scanf("%d",&n)&&n != 0)
{
int x,t,tmaxn = 0;
//赋初值
for(int i = 0; i <= 10; i++)
for(int j = 0; j <= maxn; j++)
a[i][j] = dp[i][j] = 0;
for(int i = 1; i <= n; i++)
{
scanf("%d%d",&x,&t);
a[x][t]++;//对应位置累计天数
if(t > tmaxn)
tmaxn = t;
}
for(int j = 1; j <= tmaxn; j++)
for(int i = 0; i <= 10; i++)
{
//关键:在可以走到的范围内分情况讨论
if(i <= 5 + j && i >= 5 - j)
{
if(i == 0)
dp[i][j] = max(dp[i + 1][j - 1] + a[i][j],dp[i][j - 1] + a[i][j]);
else if(i == 10)
dp[i][j] = max(dp[i - 1][j - 1] + a[i][j],dp[i][j - 1] + a[i][j]);
else
dp[i][j] = max(dp[i - 1][j - 1] + a[i][j],max(dp[i + 1][j - 1] + a[i][j], dp[i][j - 1] + a[i][j]));
}
}
int max1 = 0;
//找到最优解
for(int i = 0; i <= 10; i++)
{
if(dp[i][tmaxn] > max1)
max1 = dp[i][tmaxn];
}
printf("%d\n",max1);
}
return 0;
}