#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
#include<stack>
#include<vector>
#include<set>
#include<map>
#define L(x) (x<<1)
#define R(x) (x<<1|1)
#define MID(x,y) ((x+y)>>1)
#define bug printf("hihi\n")
#define eps 1e-8
typedef __int64 ll;
using namespace std;
#define N 4004
int n,a[N];
int dp[N][N];
void solve()
{
int i,j;
memset(dp,0,sizeof(dp));
dp[0][0]=0;
int ans=1;
for(i=1;i<=n;i++)
{
int last;
for(j=last=0;j<i;j++)
{
dp[i][j]=dp[j][last]+1;
//printf("%d %d %d %d\n",last,i,j,dp[i][j]);
ans=max(ans,dp[i][j]);
if(a[j]==a[i]) last=j;//last 代表坐标小于j的a[i]的坐标最大的位置
}
}
printf("%d\n",ans);
}
int main()
{
int i,j;
while(~scanf("%d",&n))
{
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
solve();
}
return 0;
}