hdu 2859
#include<stdio.h>
char s[1010][1010];
int map[1010][1010];
int main() {
int n,i,j,k,ii,jj;
while(scanf("%d",&n),n) {
for(i=0;i<n;i++)
scanf("%s",s[i]);
int su=-1;
for(i=0;i<n;i++)
for(j=0;j<n;j++) {
if(i==0)
map[0][j]=1;
else {
for(ii=i,jj=j;ii>=0&&jj<n;ii--,jj++)
if(s[ii][j]!=s[i][jj])
break;
k=i-ii;
if(k>map[i-1][j+1])
map[i][j]=map[i-1][j+1]+1;
else
map[i][j]=k;
}
if(su<map[i][j])
su=map[i][j];
}
printf("%d\n",su);
}
return 0;
}
char s[1010][1010];
int map[1010][1010];
int main() {
int n,i,j,k,ii,jj;
while(scanf("%d",&n),n) {
for(i=0;i<n;i++)
scanf("%s",s[i]);
int su=-1;
for(i=0;i<n;i++)
for(j=0;j<n;j++) {
if(i==0)
map[0][j]=1;
else {
for(ii=i,jj=j;ii>=0&&jj<n;ii--,jj++)
if(s[ii][j]!=s[i][jj])
break;
k=i-ii;
if(k>map[i-1][j+1])
map[i][j]=map[i-1][j+1]+1;
else
map[i][j]=k;
}
if(su<map[i][j])
su=map[i][j];
}
printf("%d\n",su);
}
return 0;
}