#include <bits/stdc++.h>   using namespace std;   int n, x, y;   bool f[1000010];   vector<int> v, b[1000010];   int ans = 0, res = 0;   int main(int argc, char **argv) {     scanf( %d , &n);     if (n == 1) {       puts( 1 );       return 0;     }     for (int i = 0; i < n; ++i) {       scanf( %d , &x);       b[x].push_back(i);       if (!f[x]) {         f[x] = 1;         v.push_back(x);       }     }     for (int i = 0; i < (int)v.size(); ++i) {       for (int j = i; j < (int)v.size(); ++j) {         x = v[i];         y = v[j];         if (i == j) {           res = max(res, (int)b[x].size());           continue;         }         bool ok = 0;         int idx = -1;         ans = 0;         if (b[x][0] < b[y][0]) {           while (idx <= (int)b[x].back() || idx <= (int)b[y].back()) {             if (ok == 0) {               if (idx == -1) {                 ++ans;                 idx = b[x][0];               } else {                 int ii =                     lower_bound(b[x].begin(), b[x].end(), idx) - b[x].begin();                 if (ii < (int)b[x].size()) {                   ++ans;                   idx = b[x][ii];                 } else                   idx = 1e9;               }             } else {               if (idx == -1) {                 ++ans;                 idx = b[y][0];               } else {                 int ii =                     lower_bound(b[y].begin(), b[y].end(), idx) - b[y].begin();                 if (ii < (int)b[y].size()) {                   ++ans;                   idx = b[y][ii];                 } else                   idx = 1e9;               }             }             ok ^= 1;           }         } else {           swap(x, y);           while (idx <= (int)b[x].back() || idx <= (int)b[y].back()) {             if (ok == 0) {               if (idx == -1) {                 ++ans;                 idx = b[x][0];               } else {                 int ii =                     lower_bound(b[x].begin(), b[x].end(), idx) - b[x].begin();                 if (ii < (int)b[x].size()) {                   ++ans;                   idx = b[x][ii];                 } else                   idx = 1e9;               }             } else {               if (idx == -1) {                 ++ans;                 idx = b[y][0];               } else {                 int ii =                     lower_bound(b[y].begin(), b[y].end(), idx) - b[y].begin();                 if (ii < (int)b[y].size()) {                   ++ans;                   idx = b[y][ii];                 } else                   idx = 1e9;               }             }             ok ^= 1;           }         }         res = max(res, ans);       }     }     cout << res << endl;     return 0;   }   