//两头填充字符后 #1#2#4#
//rad[i]为包括i中心,至两边半径。该回文串长度为rad[i] - 1,
#include <iostream>
#include <string>
#include <vector>
#include <cstring>
using namespace std;
const int maxn = 1005;
int rad[maxn];
int main()
{
int n,t;
vector<int> v;
while (cin >> n && n) {
v.clear();
v.push_back(0);
for (int i = 0; i < n; i ++) {
cin >> t;
v.push_back(t);
v.push_back(0);
}
int id = 0,mx = 0;
memset(rad, 0, sizeof(rad));
for (int i = 1; i < v.size(); i ++) {
rad[i] = i < mx ? min(rad[2 * id - i] ,mx - i) : 1;//i在mx左边的话,就min
while (v[i + rad[i]] == v[i - rad[i]] && i - rad[i] >= 0 && i + rad[i] < v.size()) {//向两边取可能超范围
rad[i] ++;
}
if (i + rad[i] > mx) {
mx = i + rad[i];
id = i;
}
}
int maxr = 0;
for (int i = 0; i < v.size(); i ++) {
maxr = max(maxr,rad[i]);
}
printf("%d\n",maxr - 1);
}
return 0;
}