#include <bits/stdc++.h>
using namespace std;
int arr[4005];
int nxt[4005], prv[4005];
map<int, int> M;
map<int, int> Q;
int main() {
  int n;
  cin >> n;
  int ans = 0;
  for (int i = 0; i < n; ++i) {
    cin >> arr[i];
    if (M.find(arr[i]) != M.end()) {
      nxt[M[arr[i]]] = i;
      prv[i] = M[arr[i]];
      Q[arr[i]]++;
      ans = max(ans, Q[arr[i]]);
    } else {
      prv[i] = -1;
      Q[arr[i]]++;
      ans = max(ans, Q[arr[i]]);
    }
    M[arr[i]] = i;
    nxt[i] = -1;
  }
  for (int i = 0; i < n; ++i) {
    if (prv[i] != -1) {
      continue;
    }
    for (int j = i + 1; j < n; ++j) {
      if (prv[j] != -1) {
        continue;
      }
      int cur = 2;
      int t1 = i, t2 = j;
      while (t1 != -1 && t2 != -1) {
        if (t1 < t2) {
          if (nxt[t1] > t2) {
            ++cur;
          }
          t1 = nxt[t1];
        } else {
          if (nxt[t2] > t1) {
            ++cur;
          }
          t2 = nxt[t2];
        }
      }
      ans = max(ans, cur);
    }
  }
  cout << ans << endl;
  return 0;
}
