#include <bits/stdc++.h>
using namespace std;
vector<long long> adj[400005], visited(400005, 0), prime(15000002, 0),
    fact(1000005, 1), v;
long long mM(long long a, long long b, long long mod) {
  long long res = 0;
  a %= mod;
  while (b) {
    if (b & 1) res = (res + a) % mod;
    a = (2 * a) % mod;
    b >>= 1;
  }
  return res;
}
long long fpow(long long first, long long second, long long p) {
  first = first % p;
  long long res = 1;
  while (second) {
    if (second & 1) res = (res * first) % p;
    res %= p;
    if (res < 0) res = (res + p) % p;
    second = second >> 1;
    first = (first * first) % p;
    if (first < 0) first = (first + p) % p;
    first %= p;
  }
  return res;
}
long long inv(long long n) { return fpow(n, 1000000007 - 2, 1000000007); }
long long modmul(long long first, long long second) {
  return ((first % 1000000007) * (second % 1000000007)) % 1000000007;
}
long long modadd(long long first, long long second) {
  long long temp = first % 1000000007 + second % 1000000007;
  temp %= 1000000007;
  if (temp < 0) temp = (temp + 1000000007) % 1000000007;
  return temp;
}
void dfs(long long src) {
  visited[src] = true;
  for (auto e : adj[src])
    if (!visited[e]) dfs(e);
}
void sieve() {
  prime[1] = 1;
  for (long long i = 2; i <= 15000000; i++)
    if (!prime[i])
      for (long long j = i; j <= 15000000; j += i)
        if (!prime[j]) prime[j] = i;
}
void facto() {
  fact[0] = 1;
  for (int i = 1; i <= 1000000; i++) fact[i] = modmul(i, fact[i - 1]);
}
long long dp[4005][4005];
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  long long t;
  t = 1;
  while (t--) {
    long long n;
    cin >> n;
    vector<long long> a(n);
    for (int i = 0; i < n; i++) cin >> a[i];
    long long id = 0;
    map<long long, long long> m;
    for (int i = 0; i < n; i++)
      if (m.find(a[i]) == m.end()) m[a[i]] = id++;
    for (int i = 0; i < n; i++) a[i] = m[a[i]];
    for (int i = 0; i < n; i++)
      for (int j = 0; j < n; j++) dp[i][j] = 1;
    for (int i = 0; i < n; i++)
      for (int j = 0; j < i; j++)
        dp[i][a[j]] = max(1 + dp[j][a[i]], dp[i][a[j]]);
    long long ans = 0;
    for (int i = 0; i < n; i++)
      for (int j = 0; j < n; j++) ans = max(ans, dp[i][j]);
    cout << ans << "\n";
  }
}
