#include <bits/stdc++.h>
#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math,O3")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
using namespace std;
const long long N = 1e5 + 1, M = 2e6 + 1;
long long n, k;
long long a[N], ans = 1;
vector<long long> poss[M];
vector<long long> nums;
bool arr[M];
int main() {
  ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> a[i], poss[a[i]].push_back(i);
    if (arr[a[i]]) continue;
    arr[a[i]] = 1, nums.push_back(a[i]);
  }
  for (int i = 0; i < nums.size(); i++) {
    ans = max((long long)poss[nums[i]].size(), ans);
    for (int j = i + 1; j < nums.size(); j++) {
      long long l = 0, k = 0, sub = 2;
      long long x = nums[i], y = nums[j];
      long long sn = poss[x].size(), sm = poss[y].size();
      for (int ki = 0; l < sn && k < sm; ki++) {
        if (ki % 2) {
          while (k < sm && poss[x][l] > poss[y][k]) k++;
          if (k == sm || poss[x][l] > poss[y][k]) break;
        } else {
          while (l < sn && poss[x][l] < poss[y][k]) l++;
          if (l == sn || poss[x][l] < poss[y][k]) break;
        }
        sub++;
      }
      ans = max(ans, sub);
    }
  }
  cout << ans;
}
